मैं एंड्रॉइड डिवाइस के संपर्क प्राप्त करने का प्रयास कर रहा हूं। मैं एक महान नमूना कोड hereसंपर्क प्रदर्शन समस्या प्राप्त करें
पाया हालांकि, जब एक ListActivity
कि कि कोड का उपयोग कर रहा है यह बहुत समय ले जा रहा है ArrayAdapter
साथ पॉप्युलेट करने के लिए कोशिश कर रहा है - और आकाशगंगा s2 पर लगभग 4 सेकंड पुराने उपकरणों पर भी बहुत कुछ। मुझे उस प्रदर्शन को बेहतर बनाने की आवश्यकता है। मैंने सोचा कि Cursor
लागू करने वाला है जो एक से अधिक आयाम Cursor
रखेगा, और सूची एडाप्टर के रूप में SimpleCursorAdapter
का उपयोग करेगा।
मैं इस दृष्टिकोण के साथ कुछ समस्याएं देखें:
- मैं कैसे विशिष्ट स्थिति में आइटम प्राप्त करने के लिए पता नहीं है।
- प्रत्येक कर्सर के अलग-अलग कॉलम होते हैं।
क्या ऐसा करने का एक बेहतर/आसान तरीका है?
संपादित करें:
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;
}
संपादित करें 2:
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;
}
किसी संपर्क से डेटा के टुकड़ों की पूरी और सटीक सूची क्या है जिसे आप अपनी प्रत्येक 'ListFragment' पंक्तियों में प्रस्तुत करना चाहते हैं? – CommonsWare
मैंने कोड नमूना जोड़ा, उम्मीद है कि यह बताता है (आईडी, नाम, फोन) – oshai