2017-03-01 60 views
-1

我发展的Couchbase精简版database.My问题的应用程序是,当我通过ArrayAdapter的数据看像下面形象。ArrayAdapter代码查询从couchbase精简版数据库中的数据和设置数据到列表视图中如何使用UsersAdapter将数据设置为列表视图?

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

克服这曾经创建的自定义类UsersAdapter

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

在上述适配器零指示字例外发生在这条线viewHolder.name.setText(contactData.getNames());

这是联络资料java类

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

}

请帮助我如何解决这个问题,也说不清为什么该值在UsersAdapter返回null的原因。

发生的异常是

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) 
+0

是否'list_simple'布局包含TextView的id为'textname'? – Piyush

+0

是的,它包含了ID –

+0

,这是什么'的ArrayList 数据大小的TextView = couchDb.getData();?'是否填充? – Piyush

回答

2

您已经创建了UsersAdapter但你是不是在任何地方使用它。用户它是这样的:

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

NullPointerException是因为项目为空。试着这样做:

private ArrayList<ContactData> data; 

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

然后在getView方法,如:

ContactData contactData = data.get(position); 

希望它可以帮助!

+0

没有问题不解决,仍然异常occurrs –

+0

发表您的例外 –

0

使用此:

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

仍然异常occurrs –

+0

这里贴上您的例外。 –

+0

你重写了getCount()方法吗? –

相关问题