【发布时间】:2015-09-03 16:10:05
【问题描述】:
我需要在应用程序启动时将所有电话簿联系人数据插入我的本地应用程序 sqlite 数据库中。为此,我实现了一个名为 LoadContacts.java 的类,它必须 @ 987654322@。此外,我有多个必须扩展应用程序类的类,我将这些类彼此子类化。
这些多个类是GenerateFacebookSignature extends Application、VolleyAppController extends GenerateFacebookSignature、SessionManagement extends VolleyAppController 和LoadContacts extends SessionManagement。这是我的类层次结构。
在 LoadContacts.java 中编写的异步任务没有执行,因为当我检查了 DatabaseHelper 类中的附加调试器时,它返回空光标。
这是我的 LoadContacts.java 的代码。
public class LoadContacts extends SessionManagement {
Context context;
Uri contactsUri, contactsDataUri;
Cursor contactsCursor, contactsDataCursor, birthDayCursor;
String contactId;
GetAllPhoneBookContacts getAllPhoneBookContacts;
DatabaseHelper databaseHelper = new DatabaseHelper(getApplicationContext());
public LoadContacts(Context context) {
super(context);
}
@Override
public void onCreate() {
super.onCreate();
getAllPhoneBookContacts = new GetAllPhoneBookContacts();
getAllPhoneBookContacts.execute();
}
public class GetAllPhoneBookContacts extends AsyncTask {
@Override
protected Object doInBackground(Object[] params) {
contactsUri = ContactsContract.Contacts.CONTENT_URI;
contactsCursor = getContentResolver().query(contactsUri, null, null, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC ");
if (contactsCursor != null && contactsCursor.getCount() > 0) {
if (contactsCursor.moveToFirst()) {
do {
contactId = contactsCursor.getString(contactsCursor.getColumnIndex("_ID"));
contactsDataUri = ContactsContract.Data.CONTENT_URI;
contactsDataCursor = getContentResolver().query(contactsDataUri, null, ContactsContract.Data.CONTACT_ID + "=" + contactId, null, null);
String displayName = "";
String birthday = "";
if (contactsDataCursor.moveToFirst()) {
displayName = contactsDataCursor.getString(contactsDataCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
birthDayCursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.CommonDataKinds.Event.DATA }, ContactsContract.Data.CONTACT_ID + "=" + contactId + " AND " + ContactsContract.Data.MIMETYPE + "= '" + ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE + "' AND " + ContactsContract.CommonDataKinds.Event.TYPE + "=" + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY, null, ContactsContract.Data.DISPLAY_NAME);
if (birthDayCursor != null) {
if (birthDayCursor.getCount() > 0) {
while (birthDayCursor.moveToNext()) {
birthday = birthDayCursor.getString(0);
}
}
}
do {
}
while (contactsDataCursor.moveToNext());
databaseHelper.insertIntoContacts(contactId, displayName, birthday);
}
}
while (contactsCursor.moveToNext());
}
}
return null;
}
}
}
请检查我做错了什么或为什么联系人没有插入到我的本地 sqlite 数据库中。如果需要任何其他代码,我准备发布它。感谢您的任何帮助或建议。
【问题讨论】:
-
在 Manifest 文件中,您将哪个类定义为应用程序?
-
添加您的 DatabaseHelper 类。
-
我在我的 Manifest 文件中添加 SessionManagement。
-
@Ankit 我无法发布整个数据库类,但我将发布联系人表结构和获取联系人数据的方法。请参阅上面的修改。
-
@AshishKumarGupta 只需在
SessionManagementonCreate method内启动 asynkTask。
标签: android android-sqlite android-contacts