将联系人插入到EntityModifier.getEntryCountByType()中HTC One上的People应用程序时的NPE

时间:2013-06-30 20:46:36

标签: android

创建插入意图的代码位于

之下
    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应用程序时,所有插入的信息都在那里。所有字段都是正确的,它们的类型也是正确的。除了在保存新联系人之前不允许用户编辑信息之外,看到崩溃只是令人讨厌。

我见过this response,只是我的问题似乎有所不同:我总是为每条记录传递记录类型。在崩溃之后,我可以看到我在People应用程序中传递的类型。

如果有人知道如何在EntityModifier.getEntryCountByType()中处理此错误,请与您分享一下您的经历吗?

1 个答案:

答案 0 :(得分:0)

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

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