-1

I am developing the application in Couchbase lite database.My problem is when i query the data from the couchbase lite database and set the data into listview by ArrayAdapter the data are viewing like below image.The ArrayAdapter code is

  CouchDb couchDb = new CouchDb(getApplicationContext());
    ArrayList<ContactData> data = couchDb.getData();
    ArrayAdapter adapter = new ArrayAdapter(this,R.layout.list_simple,R.id.textname,data);
    list.setAdapter(adapter);

enter image description here

to overcome this used created the custom UsersAdapter class

public class UsersAdapter extends ArrayAdapter<ContactData>{

    public UsersAdapter(MainActivity mainActivity, ArrayList<ContactData> data) {
        super(mainActivity,R.layout.list_simple,data);
    }

    public class ViewHolder {
        TextView name;
    }

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

        ContactData contactData = getItem(position);
        ViewHolder viewHolder;

        if(convertView == null)
        {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.list_simple, parent, false);
            viewHolder.name = (TextView) convertView.findViewById(R.id.textname);
        }
        else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.name.setText(contactData.getNames());

        return convertView;
    }
}

in the above adapter null pointer exception occurs in this line viewHolder.name.setText(contactData.getNames());

This is the Contactdata java class

public class ContactData {

String names;

public ContactData(String names) {
    this.names = names;
}

public ContactData()
{

}

public String getNames() {
    return names;
}

public void setNames(String names) {
    this.names = names;
}

}

please help me how to solve this and also tell the reason why the value is returning null in UsersAdapter.

The exception occurred is

 E/AndroidRuntime: FATAL EXCEPTION: main                                                                           Process: com.seyali.couchbasedatabase2, PID: 5641                                                                           java.lang.NullPointerException: Attempt to read from field 'android.widget.TextView com.seyali.couchbasedatabase2.MainActivity$UsersAdapter$ViewHolder.name' on a null object reference
                                                                             at com.seyali.couchbasedatabase2.MainActivity$UsersAdapter.getView(MainActivity.java:107)
                                                                             at android.widget.AbsListView.obtainView(AbsListView.java:2363)
Prabha Karan
  • 1,309
  • 3
  • 17
  • 35

2 Answers2

2

You have created the UsersAdapter but you are not using it anywhere. User it like this:

CouchDb couchDb = new CouchDb(getApplicationContext());
ArrayList<ContactData> data = couchDb.getData();
UsersAdapter adapter = new UsersAdapter(this, data);
list.setAdapter(adapter);

The NullPointerException is because the items are null. Try to do this:

private ArrayList<ContactData> data;

public UsersAdapter(MainActivity mainActivity, ArrayList<ContactData> data) {
    super(mainActivity,R.layout.list_simple,data);
    this.data = data;
}

and then in the getView method like:

ContactData contactData = data.get(position);

Hope it helps!!!

Random Guy
  • 560
  • 1
  • 5
  • 11
0

Use this :

private ArrayList<ContactData> data;
private Context context;

public UsersAdapter(Context contect, ArrayList<ContactData> data) {
this.context=context;
this.data = data;
}


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

    ContactData contactData = data.get(position);
    ViewHolder viewHolder;

    if(convertView == null)
    {
        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(R.layout.list_simple, parent, false);
        viewHolder.name = (TextView) convertView.findViewById(R.id.textname);
    }
    else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.name.setText(contactData.getNames());

    return convertView;
}
Patel Jaimin
  • 231
  • 1
  • 11