-1

I have used BaseAdapter to display a custom a list.Now in that i am having a button ,but i am getting null pointer exception.I dont know why this is happening even i have initialized the button.

Code

public class ContactListAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<ContactModel> data;
    DbHandler dbHandler;

    public ContactListAdapter(Context context, ArrayList<ContactModel> data) {
        this.context = context;
        this.data = data;
    }

    @Override

    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {

        final ViewHolder holder;
        dbHandler = new DbHandler(context);

        if (view == null) {
            holder = new ViewHolder();
            view = LayoutInflater.from(context).inflate(R.layout.contact_custom_list, viewGroup, false);
            holder.tvContact = (TextView) view.findViewById(R.id.tv_contact_name);
            holder.checkBox = (CheckBox) view.findViewById(R.id.cb_contact_checkbox);
            holder.btSend = (Button) view.findViewById(R.id.bt_sharecontact_send);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }

        holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (compoundButton == holder.checkBox) {
                    if (b) {
                        dbHandler.updateContactList(data.get(i).getUserID(), 1);
                    } else {
                        dbHandler.updateContactList(data.get(i).getUserID(), 0);
                    }
                }
            }
        });


        holder.tvContact.setText(data.get(i).getContactName());

        holder.btSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                StringBuilder values = new StringBuilder();
                values = dbHandler.getCheckedContact();
            }
        });


        return view;
    }

    private class ViewHolder {
        TextView tvContact;
        CheckBox checkBox;
        Button btSend;
    }
}

LOGCAT

FATAL EXCEPTION: main
    java.lang.NullPointerException
            at example.com.pocketdocs.Group.ContactListAdapter.getView(ContactListAdapter.java:82)
            at android.widget.AbsListView.obtainView(AbsListView.java:2271)
            at android.widget.ListView.measureHeightOfChildren(ListView.java:1270)
            at android.widget.ListView.onMeasure(ListView.java:1182)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1420)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:697)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:578)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1420)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:697)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:578)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1420)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:697)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:578)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1420)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:697)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:578)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1420)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:697)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:578)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
            at android.view.View.measure(View.java:15367)
            at net.simonvt.menudrawer.OverlayDrawer.onMeasure(OverlayDrawer.java:335)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1420)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:697)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:578)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2154)
            at android.view.View.measure(View.java:15367)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1858)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1106)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1279)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4223)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
            at android.view.Choreographer.doCallbacks(Choreographer.java:555)
            at android.view.Choreographer.doFrame(Ch

On that button click i am getting some values from the database

Anuj
  • 402
  • 8
  • 16

1 Answers1

0

NPE in:

holder.btSend.setOnClickListener(...)

Since holder is not null (would have crashed earlier), btSend must be null. There's no other way for an NPE here. btSend is initialized as:

holder.btSend = (Button) view.findViewById(R.id.bt_sharecontact_send);

Your contact_custom_list layout doesn't contain a view with id bt_sharecontact_send and the findViewById() returns null.

laalto
  • 150,114
  • 66
  • 286
  • 303