我创建了一个ListView
,它应该显示联系人-(姓名、号码、图像)。
我检索了姓名和电话号码,但无法显示图像。
我使用了自定义适配器,这里是适配器代码
public class PranzAdapter extends BaseAdapter {
ArrayList<SingleRow> list;
Context c;
PranzAdapter(Context context, ArrayList<SingleRow> listItem){
c = context;
list= listItem;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.single_row,null,false);
TextView name = (TextView) row.findViewById(R.id.textView1);
TextView number = (TextView) row.findViewById(R.id.textView2);
ImageView image = (ImageView) row.findViewById(R.id.imageView);
SingleRow singleRow = list.get(position);
name.setText(singleRow.name);
number.setText(singleRow.number);
//Error is this, Previously when any contact doesn't have image it pass `null`
if (singleRow.image!= null) {
image.setImageURI(Uri.parse(singleRow.image));
}
return row;
}
}
更新:我没有为联系人图像添加任何默认图像,因此如果任何联系人没有图像,则会抛出NullPointer
,因此您可以放置默认图像,或者您必须使用 if
条件处理异常。
我可以显示姓名和号码,但检索图像时出现问题。
这是获取联系信息的代码
public class MainActivity extends Activity {
ListView list;
ArrayList<SingleRow> listItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.listView);
listItem = new ArrayList<SingleRow>();
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
String id;
String name;
String number;
String image;
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
Cursor pCur = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
while (pCur.moveToNext())
{
number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
image = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));
SingleRow s = new SingleRow(name,number,image);
listItem.add(s);
}
pCur.close();
}
}
}
cursor.close();
list.setAdapter(new PranzAdapter(this, listItem));
}
}
这是我用于个人联系的模型类:
public class SingleRow {
String name;
String number;
String image;
//Constructor for Single row
SingleRow (String name,String number,String image){
this.name = name;
this.number = number;
this.image = image;
}
}
最佳答案
我猜问题出在这里:
image.setImageURI(Uri.parse(temp.image));
如果您的联系人没有图像,则您正在尝试解析null
。
我不是 100% 确定,但由于您没有提供任何堆栈跟踪,我猜这就是问题所在。
关于android - 我必须使用扩展基本适配器的自定义适配器在 ListView 中显示所有联系人的联系人信息(姓名、号码、图像),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29764702/