Android 无法加载联系人
我已经尝试了许多可用的例子来帮助从手机加载联系人。它在emulator上运行良好,但当我在实时移动设备上尝试时,它崩溃了。有谁能给我发送一段工作完美的测试代码吗。然后我可以与我的代码进行比较 一个失败的代码示例Android 无法加载联系人,android,load,contacts,Android,Load,Contacts,我已经尝试了许多可用的例子来帮助从手机加载联系人。它在emulator上运行良好,但当我在实时移动设备上尝试时,它崩溃了。有谁能给我发送一段工作完美的测试代码吗。然后我可以与我的代码进行比较 一个失败的代码示例 Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); if (phones.getCount() >
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
if (phones.getCount() > 0)
{
while (phones.moveToNext())
{
name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phones.close();
请提供帮助。首先,在清单文件中添加以下内容:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
确保
phones
不是null
。如果不是null
添加此行以将指针移动到第一部手机:
cursor.moveToFirst();
下面是一些代码片段,作为其工作原理的示例:
Uri contactData = data.getData();
//Cursor cursor = managedQuery(contactData, null, null, null, null);
Cursor cursor = cr.query(contactData, null, null, null, null);
cursor.moveToFirst();
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
if (Integer.parseInt(cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id},
null);
while (pCur.moveToNext()) {
String number = pCur.getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
break; // ? we want only 1 value
}
pCur.close();
}
cursor.close();
假设它将帮助您请从崩溃中添加stacktrace。
Uri contactData = data.getData();
//Cursor cursor = managedQuery(contactData, null, null, null, null);
Cursor cursor = cr.query(contactData, null, null, null, null);
cursor.moveToFirst();
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
if (Integer.parseInt(cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id},
null);
while (pCur.moveToNext()) {
String number = pCur.getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
break; // ? we want only 1 value
}
pCur.close();
}
cursor.close();