このコードを使用してAndroid.byにすべての電話番号とメールを取得しようとしています。多数の連絡先を取得しています
enter code here
String KEY_NAME = "Name";
String KEY_NO = "No";
String selection = ContactsContract.CommonDataKinds.Phone.IN_VISIBLE_GROUP + " = 1";
String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
String data="";
String name="";
ContactEntry contactObj;
String id;
List<String> temp = new ArrayList<String>();
final String[] projection = new String[]{ContactsContract.Contacts._ID , ContactsContract.Contacts.DISPLAY_NAME , ContactsContract.Contacts.HAS_PHONE_NUMBER};
final String[] email_projection = new String[] {ContactsContract.CommonDataKinds.Email.DATA , ContactsContract.CommonDataKinds.Email.TYPE};
final String[] phone_projection = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE};
ContentResolver cr = context.getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI , projection , selection , null , sortOrder);
if(cur.getCount()>0){
while(cur.moveToNext()){
id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
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 , phone_projection ,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null);
while (pCur.moveToNext()){
data = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if(!temp.contains(data) && !data.equals(null)){
}
}
pCur.close();
}
Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, email_projection,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null);
while (emailCur.moveToNext()){
data = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
if(!temp.contains(data) && !data.equals(null)){
}
}
emailCur.close();
}
}
このコードはうまくいきます。多数の連絡先について5000件の連絡先があれば、UIスレッドをブロックします。これらの連絡先をすべて表示するためのListAdapterを作成します。バックグラウンドで連絡先をすべて取得すると、長い時間の空のリストが表示されます。いくつかの解決策を提案する
はい私は、リストビューで連絡先の名前と共にすべてのデータを表示したいと思います。アダプターを使用してレイジーローディングリストビューについて詳しく説明してください。また、いくつかの例やチュートリアルに転送することもできます。 Answer – Khushwant
トピックに関する簡単なチュートリアルがあります:http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/うまくいけばそれはあなたを始めさせるでしょう。考えられるのは、ビューが呼び出されたときにアイテムがロードされるということです。これは、アイテムが表示されたときにのみ発生すると考えられます。 –
チュートリアルに感謝します。しかし、このチュートリアルではUIがブロックされており、私はこれを望んでいません。 – Khushwant