如何追查哪个字段中插入自定义字段插入联系人数据表时导致NullPointerException异常? [英] How to track down which field is causing NullPointerException when inserting custom field into Contacts Data table?

查看:108
本文介绍了如何追查哪个字段中插入自定义字段插入联系人数据表时导致NullPointerException异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

全例外,我得到的是:

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)

在code我用的是:

The code I used is:

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();
    }
}

这发生在手机上唯一的,而不是在模拟器。所有字段进行了检查,并没有一个是空值。可能是什么原因?

This happens on the phone only, and not in the emulator. All fields were checked and none of them are nulls. What could be the cause?

推荐答案

想通了,通过在原始数据进行手动添加的联系人,然后通过试错关注着一个巨大的过程,找出数据的内容提供者是坚持拥有。这是很简单的:

Figured it out via an enormous process of poking around in the raw data for manually added contacts, followed by trial and error to figure out what data the content provider was insisting on having. It's simple enough:

当插入一个新的电话记录,您的必须的指定 Data.Type (将命名为数据2列)。如果不指定此,HTC的联系人的ContentProvider会崩溃一个NullPointerException异常。股票Android的联系人的ContentProvider不会崩溃,它只是默认为TYPE_OTHER。

When inserting a new phone record, you must specify a Data.Type (the column named "data2"). If you don't specify this, HTC's Contacts ContentProvider will crash with a NullPointerException. The stock Android Contacts ContentProvider doesn't crash, it simply defaults to TYPE_OTHER.

妈和爆炸宏达(一)实施不同的联系人ContentProvider的,做的没有的播放由记录的规则,和(b)只为释放内核源代码code。我们需要的 HtcContactsProvider2.java ,查看他们的code认为,问题是。

Damn and blast HTC for (a) implementing a different Contacts ContentProvider that does not play by the documented rules, and (b) for only releasing the kernel source code. We need HtcContactsProvider2.java to see what their code thinks the problem is.

这篇关于如何追查哪个字段中插入自定义字段插入联系人数据表时导致NullPointerException异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆