0

My app is crashing when i run it with a NullPointerException. When i run the app in debug mode i add watchers on all variables in the reported line of code and they all have values in debug mode. i can step over the troubled line in the debugger and it does not crash, but then the app crashes when i return the view (which is also not null according to the debugger) but get no error it just crashes.

Stack Trace

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() Edited

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;
}

variables i watched

none reported to be null in debug mode

viewHolder
viewHolder.title
content.getName()
viewHolder.title.getText().toString()
convertView
7
  • What mLayoutId contains in your Inflater ? Please Specify. Commented Jun 23, 2016 at 11:05
  • Did you defined your mLayoutId ??? Commented Jun 23, 2016 at 11:07
  • final EditableContentListAdapter adapter = new EditableContentListAdapter(this, R.layout.editable_section, list); Commented Jun 23, 2016 at 11:07
  • Please post your Full Adapter code. Commented Jun 23, 2016 at 11:08
  • Not related to question but might become a bug in future : viewHolder.value.setText(values.get(position).getValue().toString()); what if values.get(position).getValue() give null value? Commented Jun 23, 2016 at 11:12

3 Answers 3

3

Error in your view holder class therefore it is crashing, as you are not setting tag for view holder when you are creating so change your getView method by below.

 @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

}
Sign up to request clarification or add additional context in comments.

1 Comment

Thank You very much the SetTag(viewHolder) fixed it
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);

2 Comments

Thank You very much the SetTag(viewHolder) fixed it
@Lonergan6275 Glad to help you. Best luck :).
2

Problem in this line:

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

You have to inflate your xml layout also.

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

Your are not specifying the xml layout in getView() method. Your are only instantiating LayoutInflater

1 Comment

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.