0

创建插入意图的代码如下

    final Intent intent = new Intent(ContactsContract.Intents.Insert.ACTION);
    intent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
    intent.putExtra(ContactsContract.Intents.Insert.NAME, "some name");
    final ArrayList<ContentValues> contactData = ...; // Populate array list here
    intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contactData);

在 Galaxy Nexus、Nexus 4、Nexus 7、Nexus 10 上运行此代码没有问题。但在 HTC One People 应用程序在 HTC 自定义代码深处崩溃:

06-30 13:34:57.589: E/AndroidRuntime(27942): Caused by: java.lang.NullPointerException
06-30 13:34:57.589: E/AndroidRuntime(27942):    at com.android.htccontacts.model.EntityModifier.getEntryCountByType(EntityModifier.java:1056)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at com.android.htccontacts.model.EntityModifier.isTypeAllowed(EntityModifier.java:1047)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at com.android.htccontacts.model.EntityModifier.adjustType(EntityModifier.java:1003)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at com.android.htccontacts.model.EntityModifier.parseValues(EntityModifier.java:942)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at com.android.htccontacts.model.EntityModifier.parseExtras(EntityModifier.java:691)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at com.android.htccontacts.ui.EditContactActivity2$AddContactTask.selectAccount(EditContactActivity2.java:5014)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at com.android.htccontacts.ui.EditContactActivity2$AddContactTask.selectAccount(EditContactActivity2.java:4978)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at com.android.htccontacts.ui.EditContactActivity2$AddContactTask.doInBackground(EditContactActivity2.java:4479)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at com.android.htccontacts.ui.EditContactActivity2$AddContactTask.doInBackground(EditContactActivity2.java:4391)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at com.android.htccontacts.util.WeakAsyncTask.doInBackground(WeakAsyncTask.java:45)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
06-30 13:34:57.589: E/AndroidRuntime(27942):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

当我在崩溃后打开 People 应用程序时,所有插入的信息都在那里。所有字段都正确,它们的类型也正确。除了不允许用户在保存新联系人之前编辑信息之外,看到崩溃只是很烦人。

我已经看到了这个响应,只是我的问题似乎有所不同:我总是为每条记录传递记录类型。崩溃后,我可以看到我在 People 应用程序中传递的类型。

如果有人知道如何处理这个错误EntityModifier.getEntryCountByType(),你能分享你的经验吗?

4

1 回答 1

0

NPE 问题的根源是我使用新方法插入联系人记录,基于ContactsContract.Intents.Insert.DATA字段。HTC 建议查看EntityModifier. 根据堆栈跟踪,我认为这是 HTC 的代码,但很可能他们只是更改了此代码的包名称,其中有一个错误getEntryCountByTypeint size = entries.size(); 有些情况下entries可以为空。

底线是在旧平台上,而不是使用DATA字段来传递所有记录,我开始使用PHONE,和ContactsContract.Intents.InsertSECONDARY_PHONE中的其他字段。这种较旧的方法有局限性,但它不会导致 4.0.x Android 平台上的 People 应用程序崩溃。

于 2013-08-01T06:04:26.233 回答