【发布时间】:2012-08-23 17:19:46
【问题描述】:
我想从 Android 的内部数据库表 ContactsContract 中删除一个条目,即应该从联系人的条目中删除诸如生日之类的事件。
以下代码运行良好,但一些用户(约 1%)遇到此问题并出现 SQLException 崩溃。那么我的代码有什么问题,还是他们的设备不正确支持 Android 的 ContactsContract?
try {
ArrayList<Long> rawContactIDs = getRawContactID(o.getID());
int rawContactCount = rawContactIDs.size();
for (int r = 0; r < rawContactCount; r++) {
long rawContactID = rawContactIDs.get(r);
String where = ContactsContract.Data.MIMETYPE+" = ? AND "+ContactsContract.Data.RAW_CONTACT_ID+" = ? AND "+ContactsContract.CommonDataKinds.Event.TYPE+" = ?";
String[] selection = new String[] { ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE, String.valueOf(MY_RAW_CONTACT_ID), String.valueOf(ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY) };
getContentResolver().delete(ContactsContract.Data.CONTENT_URI, where, selection);
}
}
catch (Exception e) {}
抛出的异常是:
android.database.sqlite.SQLiteException: no such column: mimetype: , while
compiling: DELETE FROM data WHERE mimetype = ? AND raw_contact_id = ? AND
data2 = ?
at
android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158)
at
android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
at
android.content.ContentProviderProxy.delete(ContentProviderNative.java:472)
at android.content.ContentResolver.delete(ContentResolver.java:700)
at ... MY_ACTIVITY ...
【问题讨论】:
-
设备抛出此异常的任何模式?
-
在一个特定情况下是
brighter / HW-T18。 -
如果你没有从主流设备上看到这个(我个人从未听说过那个),我会把它归咎于混乱的设备。
-
@CommonsWare 如果您将此作为答案,我可以接受;)因为这可能是导致问题的原因...
标签: android android-contentprovider android-contacts sqlexception android-contentresolver