2
나는 안드로이드 앱을 만들었습니다. 모든 연락처 (1000 연락처) 기본 주소록 (내 전화)에서 얻을 것이다. 그런 다음 목록보기 (내 앱)에 모든 항목을 표시합니다. 하지만 목록보기에로드하고 표시하는 데 약 13 초를 소비합니다. 아래 코드에서 이름, 전화 번호 및 각 연락처의 회사를 쿼리하는 데 3 가지 명령을 사용했습니다. 이것이 왜 내가 목록보기에 데이터를로드하고 표시하는 데 너무 많은 시간을 소비하는 이유 인 이유라고 생각합니다.한 SQLite 명령을 사용하여 android 연락처의 모든 정보를 얻는 방법?
- 방법 만 1 SQLite는 명령을 사용하여 안드로이드의 모든 연락처 정보를 얻을 수 :
나는이 개 질문이?
- 로드 및 데이터를 더 빨리 listview에 표시하는 방법이 있습니까 ???
다음은 쿼리 할 코드입니다. 이름, 전화 번호, 연락처 회사. 쿼리의 결과는 커서에 저장됩니다. 그리고 커서를 사용하여 listAdapter를 설정합니다.
public void addNewContacts(String name, String phone, String com){
String DisplayName = name;
String MobileNumber = phone;
String company = com;
String jobTitle = "Engineer";
ArrayList <ContentProviderOperation> ops = new ArrayList <ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
//------------------------------------------------------ Names
if (DisplayName != null) {
ops.add(ContentProviderOperation.newInsert(
ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(
ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
DisplayName).build());
}
//------------------------------------------------------ Mobile Number
if (MobileNumber != null) {
ops.add(ContentProviderOperation.
newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, MobileNumber)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
.build());
}
//------------------------------------------------------ Organization
if (!company.equals("") && !jobTitle.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, company)
.withValue(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK)
.withValue(ContactsContract.CommonDataKinds.Organization.TITLE, jobTitle)
.withValue(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK)
.build());
}
// Asking the Contact provider to create a new contact
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
Log.e("ERROR: ", e.getMessage());
}
}
, 그것은 완벽하게 작동합니다. 정답으로 표시해야합니다. 많은 thx. 그런 와우! – luQ