gpt4 book ai didi

android - 如何在 Android 的 ListView 中快速加载联系人

转载 作者:搜寻专家 更新时间:2023-11-01 09:08:14 25 4
gpt4 key购买 nike

在我的应用程序中,我在 ListView 中列出联系人。联系人数量为 1000+。我得到联系人

通过使用 ContentResolver query 即 cr.query(...),将值存储在数组列表中

然后在 setListAdapter(...) 中加载数组列表。显示我的所有联系人

应用程序需要将近 1 分钟,所以我使用异步任务,但使用异步任务没有太大差异。

我需要在 2 到 4 秒内显示所有联系人。我查看默认联系人在 2 到 4 秒内加载的 Android 模拟器上的应用程序。 我已经花费了

在谷歌工作了很长时间。但我无法得到任何有用的解决方案。请帮助我如何快速加载 ListView 上的联系人。请帮我。

我的编码示例:

    private ArrayList<ContactListEntry> loadContactListInternal(String searchString) {
ArrayList<ContactListEntry> contactList = new ArrayList<ContactListEntry>();
ContentResolver cr = getContentResolver();
Cursor cur = null;
String[] projection = new String[] {BaseColumns._ID,ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.Contacts.PHOTO_ID};
....
cur=cr.query(ContactsContract.Contacts.CONTENT_URI, projection, selection, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC");

while (cur.moveToNext()) {
int id = Integer.parseInt(cur.getString(0));
....
if (input !=null)
photo = BitmapFactory.decodeStream(input);
....
ArrayList<ContactListEntry.PhoneEntry> phoneEntries = new ArrayList<ContactListEntry.PhoneEntry>();

String[] projection1 = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.TYPE};
Cursor pcur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,projection1, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { String.valueOf(id) }, null);
while (pcur.moveToNext()) {
...
}
pcur.close();

ContactListEntry entry = new ContactListEntry(id, name, photo, phoneEntries);
contactList.add(entry);
}
cur.close();

return contactList;
}
.....
in another class
private void selectionUpdated() {
....
setListAdapter(new SelectedArrayAdapter(this, app.selectedContacts));
...
}

最佳答案

使用投影和选择参数的概念来检索我案例中的联系人,最初需要 12 秒才能获得 500 个联系人。

现在需要 350 毫秒(不到一秒)

void getAllContacts() {
long startnow;
long endnow;

startnow = android.os.SystemClock.uptimeMillis();
ArrayList arrContacts = new ArrayList();

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER;
Cursor cursor = ctx.getContentResolver().query(uri, new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone._ID, ContactsContract.Contacts._ID}, selection, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");

cursor.moveToFirst();
while (cursor.isAfterLast() == false) {

String contactNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
int phoneContactID = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
int contactID = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Log.d("con ", "name " + contactName + " " + " PhoeContactID " + phoneContactID + " ContactID " + contactID)

cursor.moveToNext();
}
cursor.close();
cursor = null;

endnow = android.os.SystemClock.uptimeMillis();
Log.d("END", "TimeForContacts " + (endnow - startnow) + " ms");
}

有关此链接的更多信息 http://www.blazin.in/2016/02/loading-contacts-fast-from-android.html ....

关于android - 如何在 Android 的 ListView 中快速加载联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10313601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com