指定为非null的参数为null:参数投影内容提供者Kotlin

时间:2019-07-10 09:08:18

标签: android kotlin android-contentprovider android-contentresolver

我正在尝试从Kotlin文件查询内容提供者。请参见下面的代码:

var URI = Uri.parse("content://myprovider")
var nameUri = Uri.withAppendedPath(URI, "name")
cursor = contentResolver.query(nameUri, null, null, null, null)

运行此代码时,出现错误

Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter projection
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
    at android.content.ContentProviderProxy.query(ContentProviderNative.java:418)
    at android.content.ContentResolver.query(ContentResolver.java:802)

现在,当我在ContentResolver类中检查查询方法签名时,就是这样

public final @Nullable Cursor query(@RequiresPermission.Read @NonNull Uri uri,
        @Nullable String[] projection, @Nullable String selection,
        @Nullable String[] selectionArgs, @Nullable String sortOrder)

如您所见,除了Uri,其他所有内容都可以为Nullable,因此从技术上讲,它不应引发此错误。

此外,我尝试给出投影,但随后为selectionArgs抛出了错误。

请帮助。预先感谢。

注意: contentResolver not nameUri都不为空

1 个答案:

答案 0 :(得分:5)

你能试试吗

override fun query(uri: Uri, projection: Array<String>?, selection: String?,
               selectionArgs: Array<String>?, sortOrder: String?): Cursor? {

//ur code

return cursor
}

refer to this link