【发布时间】:2017-04-13 05:03:42
【问题描述】:
我有这些代码,它们基本上使用 ListView 来显示联系人列表中的姓名,我想在单击每个姓名时获取他们的电话号码:
final ContentResolver cr = getContentResolver();
final Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
myCursorAdapter = new SimpleCursorAdapter(this, R.layout.list_item, c, new String[] {ContactsContract.Contacts.DISPLAY_NAME}, new int[]{R.id.TVRow}, 0);
myPhoneList.setAdapter(myCursorAdapter);
myPhoneList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
c.moveToPosition(position);
Toast.makeText(getApplicationContext(), c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)), Toast.LENGTH_SHORT).show();
}
});
在onItemClick方法中
GetColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)
返回 -1,因此我无法使用此方法获取电话号码。
我还尝试打印出光标 c 的所有列,它返回 34 列,但似乎与电话号码相关的唯一列是 HasPhoneNumber。
那么问题出在哪里,我该如何解决?谢谢!
更新版本,其中 String 数组传递给构造 myCursorAdapter 发生变化:
final ContentResolver cr = getContentResolver();
final Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
myCursorAdapter = new SimpleCursorAdapter(this, R.layout.list_item, c, new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER}, new int[]{R.id.TVRow}, 0);
myPhoneList.setAdapter(myCursorAdapter);
myPhoneList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
c.moveToPosition(position);
Toast.makeText(getApplicationContext(), c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)), Toast.LENGTH_SHORT).show();
}
});
我想更新后的代码将在 ListView 中显示电话号码,但我收到一条错误消息“列 'data1' 不存在”。
【问题讨论】: