NPE

2013-06-30 57 views
0

创建插入意图的代码如下NPE

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,10的Nexus但在HTC一号人物应用程序崩溃,深藏在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) 

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

我见过this response,只是我的问题看起来不一样:我总是为每条记录传递记录类型。在崩溃后,我可以看到我在People应用中传递的类型。

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

回答

0

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

底线是在旧的平台,而不是使用DATA场传递的所有记录,我开始在ContactsContract.Intents.Insert使用PHONESECONDARY_PHONE等领域。这种较旧的方法有局限性,但它不会在4.0.x Android平台上崩溃People应用程序。