이 코드를 사용하여 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를 만들 수 있습니다. 배경 사용자의 모든 연락처를 가져 오면 긴 시간 동안 빈 목록이 표시됩니다. 몇 가지 해결책을 제안하십시오
예 목록보기에서 연락처 이름과 함께 모든 데이터를 표시하려고합니다. 어댑터가있는 지연로드 목록보기에 대해 더 자세히 설명해 주시겠습니까? 아니면 몇 가지 예제 또는 자습서로 전달할 수 있습니까? 답변 – Khushwant
다음은 주제에 대한 빠른 자습서입니다 : http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/. 잘하면 그것은 당신을 시작할 것입니다. 아이디어는 뷰를 호출 할 때 항목이로드되고 항목이 표시 될 때만 발생한다고 가정합니다. –
튜토리얼을 주셔서 감사합니다.하지만이 튜토리얼에서는 UI가 막히고 있으며 저는 이것을 원하지 않습니다. – Khushwant