有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

ListView数组适配器中的java Android NullPointerException

当我用^{运行我的应用程序时,它正在崩溃。当我在调试模式下运行应用程序时,我会在报告的代码行中的所有变量上添加观察程序,并且它们在调试模式下都有值。我可以在调试器中跳过有问题的行,它不会崩溃,但当我返回视图(根据调试器,该视图也不是null)时,应用程序崩溃,但没有得到错误,它只是崩溃

堆栈跟踪

FATAL EXCEPTION: main
    Process: com.team.app, PID: 17963
    java.lang.NullPointerException: Attempt to read from field '安卓.widget.TextView com.team.app.Adapters.EditableContentListAdapter$ViewHolder.value' on a null object reference
    at com.team.app.Adapters.EditableContentListAdapter.getView(EditableContentListAdapter.java:83)
    at 安卓.widget.AbsListView.obtainView(AbsListView.java:2346)
    at 安卓.widget.ListView.measureHeightOfChildren(ListView.java:1281)
    at 安卓.widget.ListView.onMeasure(ListView.java:1188)
    at 安卓.view.View.measure(View.java:18880)
    at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
    at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
    at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:748)
    at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:630)
    at 安卓.view.View.measure(View.java:18880)
    at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
    at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
    at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:748)
    at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:630)
    at 安卓.view.View.measure(View.java:18880)
    at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
    at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:194)
    at 安卓.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
    at 安卓.view.View.measure(View.java:18880)
    at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
    at 安卓.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391)
    at 安卓.view.View.measure(View.java:18880)
    at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
    at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:194)
    at 安卓.view.View.measure(View.java:18880)
    at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
    at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
    at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:748)
    at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:630)
    at 安卓.view.View.measure(View.java:18880)
    at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
    at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:194)
    at com.安卓.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2650)
    at 安卓.view.View.measure(View.java:18880)
    at 安卓.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2104)
    at 安卓.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1220)
    at 安卓.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1456)
    at 安卓.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1111)
    at 安卓.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6017)
    at 安卓.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
    at 安卓.view.Choreographer.doCallbacks(Choreographer.java:670)
    at 安卓.view.Choreographer.doFrame(Choreographer.java:606)
    at 安卓.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
    at 安卓.os.Handler.handleCallback(Handler.java:739)
    at 安卓.os.Handler.dispatchMessage(Handler.java:95)
    at 安卓.os.Looper.loop(Looper.java:224)
    at 安卓.app.ActivityThread.main(ActivityThread.java:5526)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:616)

GetView()已编辑

public EditableContentListAdapter(Context context, int layoutResourceId, List<AdvertContent> data) {
        super(context, layoutResourceId, data);
        mLayoutId = layoutResourceId;
        mContext = context;
        values = data;
        for (int i = 0; i < data.size(); ++i) {
            mIdMap.put(data.get(i), i);
        }
    }

@Override
public View getView(int position, View convertView, ViewGroup parent) {


    AdvertContent content = getItem(position);


    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    ViewHolder viewHolder; // view lookup cache stored in tag
    if (convertView == null) {
        viewHolder = new ViewHolder();
        convertView = inflater.inflate(mLayoutId, parent, false);
        viewHolder.value = (TextView) convertView.findViewById(R.id.section_value);
        viewHolder.title = (TextView) convertView.findViewById(R.id.section_title);
        viewHolder.icon = (ImageView) convertView.findViewById(R.id.section_icon);
        viewHolder.value.setText(values.get(position).getValue().toString());
        viewHolder.title.setText(values.get(position).getName());
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    // Populate the data into the template view using the data object

    if (content != null) {
        viewHolder.title.setText(content.getName()); // carshes on any of these 3 lines in normal run.
        viewHolder.value.setText(content.getValue().toString());
        viewHolder.title.setTextColor(Color.GRAY);
    }
    return convertView;//crashes here in debugmode

}

ViewHolder

public static class ViewHolder {
    TextView title;
    TextView value;
    ImageView icon;
}

我看的变量

无报告在调试模式下为空

viewHolder
viewHolder.title
content.getName()
viewHolder.title.getText().toString()
convertView

共 (3) 个答案

  1. # 1 楼答案

    视图持有者类中出现错误,因此它会崩溃,因为在创建视图持有者时,您没有为视图持有者设置标记,所以请在下面更改getView方法

     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
    
    
    AdvertContent content = getItem(position);
    
    
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    ViewHolder viewHolder; // view lookup cache stored in tag
    if (convertView == null) {
        viewHolder = new ViewHolder();
        convertView = inflater.inflate(mLayoutId, parent, false);
        viewHolder.value = (TextView) convertView.findViewById(R.id.section_value);
        viewHolder.title = (TextView) convertView.findViewById(R.id.section_title);
        viewHolder.icon = (ImageView) convertView.findViewById(R.id.section_icon);
    
        convertView.setTag(viewHolder);
    
    
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    // Populate the data into the template view using the data object
    
    if (content != null) {
        viewHolder.title.setText(content.getName()); // carshes on any of these 3 lines in normal run.
        viewHolder.value.setText(content.getValue().toString());
        viewHolder.title.setTextColor(Color.GRAY);
    }
    return convertView;//crashes here in debugmode
    
    }
    
  2. # 2 楼答案

    In your Inflater you need to give your Layout.

    Also you need to set Tag to convertview.

    convertView = inflater.inflate(mLayoutId, parent, false);
    convertView.setTag(viewHolder);
    
  3. # 3 楼答案

    这方面的问题:

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    

    您还必须扩大xml布局

    convertView = inflater .inflate(R.layout.your_row_layout, parent, false);
    

    您没有在getView()方法中指定xml布局。您的示例只是LayoutInflater