有没有其他方法可以在不使用"getContentResolver()"的情况下访问联系人?



我的应用程序总是很慢,有时会崩溃,因为要访问联系人列表,我正在使用getContentResolver(),这使我的应用程序运行另一个额外的进程到主进程。每当该附加进程运行时,我的应用程序都会开始变慢并崩溃。

那么,有没有在不传递到该getContentResolver()的情况下访问联系人列表的想法?

建议使用 AsyncTaskLoader 从设备获取联系人,因为它是异步的,并且也适用于活动生命周期。

您应该使用AsynTask在后台线程中完成这项工作

private class LoadContacts extends AsyncTask<Void, Boolean, Boolean> {  
protected void onPreExecute() {
Log.e("LS", "Start !");
}
@Override
protected Boolean doInBackground(Void... params) {
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
try {
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (cur.getInt(cur.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 phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String data = "Name : " + name + " - Phone : " + phoneNo;
}
pCur.close();
}
}
}
cur.close();
} catch (NullPointerException | java.io.IOException e) {
Log.e("LS", e.getMessage());
}
return true;
}
protected void onPostExecute(Boolean result) {
Log.e("LS", "Done !");
}
}

相关内容

最新更新