尝试获取空数组异常

时间:2016-02-24 12:30:04

标签: android android-contentprovider

每当我拨打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)

我该如何解决这个问题?

1 个答案:

答案 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,存储的数据,任何......),这使得它在您的华硕的特定情况下为空;

  • 或者因为它在您测试的其他手机上“偶然”工作。当代码出错时,有时会发生这种情况,但由于您不能依赖某些允许性而不会引发任何错误。

这取决于您的应用的功能。