我對應用程序開發並不是很有經驗,但是我必須編寫一個應用程序來讀取所有phonebookdata並將其保存到xml文件中。從android手機獲取所有電話簿數據
我目前的版本正在我的手機上運行(只有150個聯繫人)。但是當我在有數千個聯繫人的設備上運行它時,應用程序變得非常慢。當我點擊一個按鈕時,需要將近一分鐘,直到顯示新的屏幕。
我想我的應用程序的結構不是很好。那怎麼我現在讀的所有數據:
私人無效xmlPart2(XmlSerializer的序列化){
try {
ContentResolver contentr = getContentResolver();
Cursor cursor = contentr.query(
ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String id = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
serializer.startTag(null, "Contact");
serializer.attribute(null, "ID", id);
Cursor emailCur = contentr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " = ?", new String[] { id }, null);
serializer.startTag(null, "Emails");
while (emailCur.moveToNext()) {
String email = emailCur
.getString(emailCur
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
String emailtype = emailCur
.getString(emailCur
.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
this.appendNode(serializer, "Email", email, emailtype);
}
serializer.endTag(null, "Emails");
emailCur.close();
if (Integer
.parseInt(cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = contentr
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?", new String[] { id },
null);
serializer.startTag(null, "Numbers");
while (pCur.moveToNext()) {
String phonenumber = pCur
.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String phonetype = pCur
.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
this.appendNode(serializer, "Number", phonenumber,
phonetype);
}
serializer.endTag(null, "Numbers");
pCur.close();
}
serializer.endTag(null, "Contact");
}
}
cursor.close();
} catch (IOException e) {
e.printStackTrace();
}
}
這僅僅是一個部分的代碼。在當前代碼中,我閱讀了以下字段: 姓名,地址,電子郵件,組織,筆記,即時通訊,網站,暱稱和電話號碼。
有沒有一種方法來優化它?因爲它也應該在API級別11以下工作,所以我不能使用CursorLoader。
我很感謝每一個建議。
是這段代碼在主線程中運行嗎? – quinestor