我試圖使用ContactsProvider
與我的AutoCompleteTextview
使用一種方法來獲取數據(名稱和電話號碼)並將它們存儲在列表中。正如預期的那樣,此方法將總是需要時間來完成作爲我打電話,我Fragment
類的onCreateView
方法的方法。Android Contacts與AutocompleteTextview的合同太慢
這是方法:
...
ArrayList<String> phoneValues;
ArrayList<String> nameValues;
...
private void readContactData() {
try {
/*********** Reading Contacts Name And Number **********/
String phoneNumber = "";
ContentResolver contentResolver = getActivity()
.getContentResolver();
//Query to get contact name
Cursor cursor = contentResolver
.query(ContactsContract.Contacts.CONTENT_URI,
null,
null,
null,
null);
// If data data found in contacts
if (cursor.getCount() > 0) {
int k=0;
String name = "";
while (cursor.moveToNext())
{
String id = cursor
.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
name = cursor
.getString(cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
//Check contact have phone number
if (Integer
.parseInt(cursor
.getString(cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
//Create query to get phone number by contact id
Cursor pCur = contentResolver
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?",
new String[] { id },
null);
int j=0;
while (pCur
.moveToNext())
{
// Sometimes get multiple data
if(j==0)
{
// Get Phone number
phoneNumber =""+pCur.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// Add contacts names to adapter
autocompleteAdapter.add(name);
// Add ArrayList names to adapter
phoneValues.add(phoneNumber.toString());
nameValues.add(name.toString());
j++;
k++;
}
} // End while loop
pCur.close();
} // End if
} // End while loop
} // End Cursor value check
cursor.close();
} catch (Exception e) {
Log.i("AutocompleteContacts","Exception : "+ e);
}
}
相信有更好的方式來做到這一點,但這種方法的作品,當我鍵入到AutocompleteTextview
的建議都。我只是擔心所花費的時間。如何在不填充ArrayList
的情況下完成此操作? 我已經看過了這個問題:Getting name and email from contact list is very slow和應用的答案建議我的代碼,但現在當我我type.How可以提高我目前的代碼的性能沒有什麼建議?
「我怎樣才能做到這一點不填充的ArrayList?」使用'SimpleCursorAdapter'也需要多長時間?多少聯繫人?數據集獨立於視圖層次結構。將retain實例設置爲true,並通過'CursorLoader'異步獲取數據到'onCreate'中。 – pskink
@pskink當我點擊一個按鈕導航到片段,大約需要8秒導航到該片段 –
了多少個聯繫人,你呢? – pskink