创建插入意图的代码位于
之下 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()
中处理此错误,请与您分享一下您的经历吗?
答案 0 :(得分:0)
NPE问题的根源在于我使用新方法根据ContactsContract.Intents.Insert.DATA字段插入联系人记录。 HTC建议查看EntityModifier
的代码。基于堆栈跟踪,我认为这是HTC的代码,但可能他们只是更改了this code的包名称,getEntryCountByType
中有一个错误:int size = entries.size();
有些情况{{1}可以为null。
底线是在较旧的平台上,而不是使用entries
字段来传递所有记录,我开始使用DATA
,PHONE
和ContactsContract.Intents.Insert中的其他字段。这种旧方法有局限性,但它不会使4.0.x Android平台上的People应用程序崩溃。