我得到的完整例外是:
07-16 19:19:17.244: ERROR/DatabaseUtils(151): java.lang.NullPointerException
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.ContactsProvider2.insertData(ContactsProvider2.java:3069)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.ContactsProvider2.insertInTransaction(ContactsProvider2.java:2930)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.CContactsProvider2.insertInTransaction(CContactsProvider2.java:156)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.HtcContactsProvider2.insertInTransaction(HtcContactsProvider2.java:1281)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.SQLiteContentProvider.insert(SQLiteContentProvider.java:90)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.ContactsProvider2.insert(ContactsProvider2.java:2737)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at android.content.ContentProvider$Transport.insert(ContentProvider.java:150)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:170)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at android.os.Binder.execTransact(Binder.java:287)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at dalvik.system.NativeStart.run(Native Method)
Run Code Online (Sandbox Code Playgroud)
我使用的代码是:
public void saveFormality() {
ContentValues values = new ContentValues();
values.put(Data.DATA1, this.getFormality() ? "1" : "0");
saveDataWithMimeType(clsContacts.MIMETYPE_FORMALITY, values, this.getId());
}
private void saveDataWithMimeType(String mimetype, ContentValues values, String contactid) {
try {
int mod = ctx.getContentResolver().update(
Data.CONTENT_URI,
values,
ContactsContract.Data.RAW_CONTACT_ID + "=" + contactid + " AND " + ContactsContract.Data.MIMETYPE + "= '"
+ mimetype + "'", null);
if (mod == 0) {
values.put(Data.RAW_CONTACT_ID, contactid);
values.put(Data.MIMETYPE, mimetype);
// this is where exception occurs
Uri u=ctx.getContentResolver().insert(Data.CONTENT_URI, values);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这只发生在手机上,而不是在模拟器中.检查了所有字段,但没有一个是空值.可能是什么原因?
Reu*_*ton 10
通过在原始数据中寻找手动添加的联系人的庞大过程来计算出来,然后通过反复试验来确定内容提供商坚持要求的数据.这很简单:
插入新电话记录时,必须指定Data.Type
(名为"data2"的列).如果您不指定此项,HTC的Contacts ContentProvider将因NullPointerException而崩溃.股票Android Contacts ContentProvider不会崩溃,它只是默认为TYPE_OTHER.
该死的和(一)实施不同的联系人的ContentProvider,它爆炸HTC 没有被记录的规则行事,和(b)只释放内核源代码.我们需要HtcContactsProvider2.java来查看他们的代码认为问题是什么.
归档时间: |
|
查看次数: |
829 次 |
最近记录: |