每当我拨打getContentResolver().applyBatch(authority,batch)
时,我的应用程序在华硕手机上崩溃,而在其他Android智能手机上运行正常。
logcat的
java.lang.NullPointerException: Attempt to get length of null array
at android.content.ContentProvider$Transport.applyBatch(ContentProvider.java:288)
at android.content.ContentProviderClient.applyBatch(ContentProviderClient.java:377)
at android.content.ContentResolver.applyBatch(ContentResolver.java:1244)
我该如何解决这个问题?
答案 0 :(得分:0)
会发生什么:
您使用空operations
数组调用ContentResolver.applyBatch()
,这就是您收到NullPointerException
的原因。
此方法要求此参数不为null,如其签名所示:
public @NonNull ContentProviderResult[] applyBatch(@NonNull String authority,
@NonNull ArrayList<ContentProviderOperation> operations)
throws RemoteException, OperationApplicationException
您应该在调用batch
之前测试applyBatch()
数组的有效性,并且在batch
为空时避免调用它(假设将其设为null意味着无法应用操作)
为什么它适用于某些手机而不适用于其他手机?
要么是因为要应用的操作列表取决于手机本身或其配置(安装的应用程序,Android API,存储的数据,任何......),这使得它在您的华硕的特定情况下为空;
或者因为它在您测试的其他手机上“偶然”工作。当代码出错时,有时会发生这种情况,但由于您不能依赖某些允许性而不会引发任何错误。
这取决于您的应用的功能。