Android 添加联系人组会使HTC和三星设备出现NullPointerexception
我正在尝试使用Android 添加联系人组会使HTC和三星设备出现NullPointerexception,android,android-contentprovider,android-contacts,samsung-mobile,contactscontract,Android,Android Contentprovider,Android Contacts,Samsung Mobile,Contactscontract,我正在尝试使用ContentProviderOperation添加联系人组。这在Nexus、Moto G和华硕的设备上运行,但在HTC M7、M8、M8 mini和M9、三星S4、S5上崩溃。因为我只有普通的干净Android的源代码,所以我无法通过调试找到Nullpointer导致了什么 我在此ContentProviderOperation中使用的值均为空。 这些组将添加到authenticator.xml中指定的自定义帐户类型中 代码: public Uri addContactGroup
ContentProviderOperation
添加联系人组。这在Nexus、Moto G和华硕的设备上运行,但在HTC M7、M8、M8 mini和M9、三星S4、S5上崩溃。因为我只有普通的干净Android的源代码,所以我无法通过调试找到Nullpointer导致了什么
我在此ContentProviderOperation
中使用的值均为空。
这些组将添加到authenticator.xml中指定的自定义帐户类型中
代码:
public Uri addContactGroup(字符串标题、布尔值自动添加、布尔值isReadOnly、布尔值isVisible){
ArrayList ops=新的ArrayList();
添加操作(ContentProviderOperation
.newInsert(contacts contract.Groups.CONTENT\u URI)
.withValue(contacts contract.Groups.TITLE,TITLE)
.withValue(contacts contract.Groups.ACCOUNT_TYPE,getAccount().TYPE)
.withValue(contacts contract.Groups.ACCOUNT_NAME,getAccount().NAME)
.withValue(contacts contract.Groups.AUTO_ADD,autoAdd)
.带值(contacts contract.Groups.GROUP为只读,isReadOnly)
.带值(contacts contract.Groups.GROUP_可见,isVisible)
.build());
试一试{
ContentProviderResult[]result=mContext.getContentResolver().applyBatch(contacts contract.AUTHORITY,ops);
如果(result.length>0){
返回结果[0]。uri;
}
}捕获(远程异常|操作应用程序异常e){
Log.e(标记,e.toString());
}
返回null;
}
引发此异常:
java.lang.NullPointerException:尝试调用虚拟方法“int”
null对象引用上的java.lang.Integer.intValue()
在android.os.Parcel.readException(Parcel.java:1555)中
位于android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
在android.database.DatabaseUtils.ReadException with OperationApplicationExceptionFromParcel(DatabaseUtils.java:160)
位于android.content.ContentProviderProxy.applyBatch(ContentProviderNative.java:573)
在android.content.ContentProviderClient.applyBatch(ContentProviderClient.java:377)
位于android.content.ContentResolver.applyBatch(ContentResolver.java:1265)
位于nl.dalvikvm.stackoverflowquestion.content.proces.CardProcess.addContactGroup(CardProcess.java:284)
位于nl.dalvikvm.stackoverflowquestion.content.proces.CardProcess.initGroups(CardProcess.java:244)
位于nl.dalvikvm.stackoverflowquestion.sync.SyncUtils.CreateSyncAccount(SyncUtils.java:55)
位于nl.dalvikvm.stackoverflowquestion.ui.MainActivity$1.run(MainActivity.java:288)
运行(Thread.java:818)
终于找到了解决办法
.withValue(ContactsContract.Groups.AUTO_ADD, autoAdd ? 1 : 0)
.withValue(ContactsContract.Groups.GROUP_IS_READ_ONLY, isReadOnly ? 1 : 0)
.withValue(ContactsContract.Groups.GROUP_VISIBLE, isVisible ? 1 : 0)
显然,在三星和HTC设备上,布尔值不被接受为值,必须首先将其转换为整数。我不知道为什么它能在其他设备上工作
.withValue(ContactsContract.Groups.AUTO_ADD, autoAdd ? 1 : 0)
.withValue(ContactsContract.Groups.GROUP_IS_READ_ONLY, isReadOnly ? 1 : 0)
.withValue(ContactsContract.Groups.GROUP_VISIBLE, isVisible ? 1 : 0)