0
我正在製作一個Android應用程序,當用戶開始輸入電子郵件地址時,他從手機通訊錄中獲取自動填充建議。Android上的聯繫人的電子郵件地址數量是否有限制?
如果我對我的代碼進行限制以僅提取地址,則它工作得很好。如果我沒有任何限制,應用程序會凍結。我沒有試圖提出一個更高的限制,看看它放棄了什麼。
如何優化我的代碼?
private ArrayList<String> getNameEmailDetails() {
ArrayList<String> emlRecs = new ArrayList<String>();
**int count = 0;** // THIS IS ADDITIONAL
HashSet<String> emlRecsHS = new HashSet<String>();
Context context = getBaseContext();
ContentResolver cr = context.getContentResolver();
String[] PROJECTION = new String[] { ContactsContract.RawContacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.PHOTO_ID,
ContactsContract.CommonDataKinds.Email.DATA,
ContactsContract.CommonDataKinds.Photo.CONTACT_ID };
String order = "CASE WHEN "
+ ContactsContract.Contacts.DISPLAY_NAME
+ " NOT LIKE '%@%' THEN 1 ELSE 2 END, "
+ ContactsContract.Contacts.DISPLAY_NAME
+ ", "
+ ContactsContract.CommonDataKinds.Email.DATA
+ " COLLATE NOCASE";
String filter = ContactsContract.CommonDataKinds.Email.DATA + " NOT LIKE ''";
Cursor cur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, PROJECTION, filter, null, order);
if (cur.moveToFirst()) {
do {
String emlAddr = cur.getString(3);
// keep unique only
if (emlRecsHS.add(emlAddr.toLowerCase())) {
emlRecs.add(emlAddr);
**count++;** // THIS IS ADDITIONAL
}
} while (cur.moveToNext() **&& count < 100**);
}
cur.close();
return emlRecs;
}