Tôi đang cố gắng liên hệ với thiết bị Android. Tôi tìm thấy một mẫu mã lớn heregặp vấn đề về hiệu suất liên hệ
Tuy nhiên, khi cố gắng để cư một ListActivity
với ArrayAdapter
đó là sử dụng mã mà nó được tham gia rất nhiều thời gian - gần 4 giây trên galaxy s2 và nhiều hơn nữa trên thiết bị cũ. Tôi cần cải thiện hiệu suất đó. Những gì tôi nghĩ là để thực hiện Cursor
sẽ giữ nhiều hơn một kích thước Cursor
và sử dụng SimpleCursorAdapter
làm bộ điều hợp danh sách.
tôi thấy vài vấn đề với cách tiếp cận này:
- Tôi không biết làm thế nào để có được item ở vị trí cụ thể.
- mỗi con trỏ có các cột khác nhau.
Có cách nào tốt hơn/dễ hơn để làm điều đó không?
EDIT:
đây là mã của tôi:
public List<ContactData> readContacts(){
ContentResolver cr = getContentResolver();
List<ContactData> cd = new ArrayList<ContactData>();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, ContactsContract.Contacts.DISPLAY_NAME);
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 (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
// get the phone number
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id}, null);
while (pCur.moveToNext()) {
String phone = pCur.getString(
pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (!Utils.isEmpty(phone)) {
cd.add(new ContactData(id, name, phone));
}
}
pCur.close();
}
}
}
return cd;
}
EDIT 2:
quản lý để sửa chữa nó bằng cách thay đổi nó để chỉ một truy vấn:
public List<ContactData> readContacts(){
ContentResolver cr = getContentResolver();
List<ContactData> cd = new ArrayList<ContactData>();
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Phone._ID,ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY},
ContactsContract.CommonDataKinds.Phone.NUMBER + " IS NOT NULL",
null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY);
while (pCur.moveToNext()) {
String phone = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String id = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
String name = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY));
ContactData cd1 = contactDataProvider.get();
cd1.id = id;
cd1.name = name;
cd1.phone = phone;
cd.add(cd1);
}
pCur.close();
return cd;
}
Danh sách đầy đủ và chính xác các phần dữ liệu từ một liên hệ mà bạn muốn hiển thị trong mỗi hàng 'ListFragment' của mình là gì? – CommonsWare
Tôi thêm mẫu mã, hy vọng nó giải thích (id, tên, điện thoại) – oshai