0

我的应用程序崩溃时,我运行它与NullPointerException。当我在调试模式下运行应用程序时,我在所报告的代码行中添加了所有变量的观察者,并且它们在调试模式下都具有值。我可以跨越调试器中的问题行,但它不会崩溃,但是当我返回视图(根据调试器也不是null)时,应用程序崩溃,但没有错误,它只是崩溃。ListView阵列适配器中的Android NullPointerException

堆栈跟踪

FATAL EXCEPTION: main 
    Process: com.team.app, PID: 17963 
    java.lang.NullPointerException: Attempt to read from field 'android.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 android.widget.AbsListView.obtainView(AbsListView.java:2346) 
    at android.widget.ListView.measureHeightOfChildren(ListView.java:1281) 
    at android.widget.ListView.onMeasure(ListView.java:1188) 
    at android.view.View.measure(View.java:18880) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
    at android.view.View.measure(View.java:18880) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
    at android.view.View.measure(View.java:18880) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
    at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
    at android.view.View.measure(View.java:18880) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
    at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391) 
    at android.view.View.measure(View.java:18880) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
    at android.view.View.measure(View.java:18880) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
    at android.view.View.measure(View.java:18880) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952) 
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
    at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2650) 
    at android.view.View.measure(View.java:18880) 
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2104) 
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1220) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1456) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1111) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6017) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
    at android.view.Choreographer.doFrame(Choreographer.java:606) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:224) 
    at android.app.ActivityThread.main(ActivityThread.java:5526) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.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 
+0

你的'Inflater'包含了什么'mLayoutId'?请明确说明。 –

+0

您是否定义了您的mLayoutId? –

+0

'final EditableContentListAdapter adapter = new EditableContentListAdapter(this,R.layout.editable_section,list);' – Lonergan6275

回答

2

在你Inflater你需要给你的Layout

Also you need to set Tag to convertview.

convertView = inflater.inflate(mLayoutId, parent, false); 
convertView.setTag(viewHolder); 
+0

非常感谢你SetTag(viewHolder)修复它 – Lonergan6275

+0

@ Lonergan6275很高兴帮助你。好运 :)。 –

2

问题在这一行:

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

你也必须抬高你的XML布局。

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

您没有在getView()方法中指定xml布局。你只实例LayoutInflater

+0

'convertView = inflater.inflate(mLayoutId,parent,false);' – Lonergan6275

3

错误在你看来holder类因此崩溃,因为你是不是在您创建的下方,从而改变你的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 

} 
+0

非常感谢'SetTag(viewHolder)'修复了它 – Lonergan6275

+0

享受你的编码... – Vickyexpert

相关问题