使用科特林与ContentResolver的引起抛出:IllegalArgumentException [英] Using kotlin with ContentResolver caused IllegalArgumentException
问题描述
我试着写与科特林的应用程序。我把ContentProvider的另一过程查询SQL。当ContentResolver的主流程查询,在App坠毁。
在code是:
保护乐趣选择(URI:URI,SQL:字符串,VARARG ARGS:任意):光标{
VAL个SARG =阵列(args.size(),{I - > lang.String.valueOf(args.get(ⅰ))})
返回context.getContentResolver()查询(URI,空,SQL,个SARG,NULL)
}公共乐趣selectAllAccounts():数组<&帐户GT; {
VAL光标=选择(parseUri(AccountSchema.TABLE_NAME),+ AccountSchema.TABLE_NAME,从选择*)
VAL占=阵列(cursor.getCount(){I - >
如果(!cursor.moveToPosition(ⅰ)){
抛出的RuntimeException(移动光标失败)
}
帐户(背景下,光标)
})
返回账户
}
这将抛出IllegalArgumentException:
10月5日至20日:27:21.120 3337-3337 / com.kescoode.yomail E / AndroidRuntime:致命异常:主要
工艺:com.kescoode.yomail,PID:3337
了java.lang.RuntimeException:无法启动活动ComponentInfo {com.kescoode.yomail / com.kescoode.yomail.ui.activity.HomeActivity}:java.lang.IllegalArgumentException异常:指定非空参数为空:方法kotlin.jvm .internal.Intrinsics.checkParameterIsNotNull,参数投影
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
在android.app.ActivityThread.access $ 800(ActivityThread.java:144)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1205)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:136)
在android.app.ActivityThread.main(ActivityThread.java:5146)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:732)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
在dalvik.system.NativeStart.main(本机方法)
java.lang.IllegalArgumentException异常:引起指定非空参数为空:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数投影
在android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167)
在android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
在android.content.ContentProviderProxy.query(ContentProviderNative.java:420)
在android.content.ContentResolver.query(ContentResolver.java:461)
在android.content.ContentResolver.query(ContentResolver.java:404)
在com.kescoode.yomail.db.Dao.select(internal.kt:33)
在com.kescoode.yomail.db.AccountDao.selectAllAccounts(AccountDao.kt:21)
在com.kescoode.yomail.App.isLogged(App.kt:28)
在com.kescoode.yomail.ui.activity.HomeActivity.onCreate(HomeActivity.kt:17)
在android.app.Activity.performCreate(Activity.java:5231)
在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169
在科特林
默认情况下所有变量和参数都非空。你是一个null参数传递给你的函数。如果你想传递空参数,你需要添加
符号添加到您的参数类型,如 URI:?乌里
。但更好的方法是检查,如果你想传递给函数的参数为null,处理这种情况。
欲了解更多信息,您可以检查本文 http://kotlinlang.org/docs/reference/null -safety.html
I'm try to write an app with Kotlin. I put the contentprovider querying sql on the other process. When querying by ContentResolver in the main process, the App crashed.
The code is:
protected fun select(uri: Uri, sql: String, vararg args: Any): Cursor {
val sArgs = Array(args.size(), { i -> lang.String.valueOf(args.get(i)) })
return context.getContentResolver().query(uri, null, sql, sArgs, null)
}
public fun selectAllAccounts(): Array<Account> {
val cursor = select(parseUri(AccountSchema.TABLE_NAME), "select * from " + AccountSchema.TABLE_NAME)
val accounts = Array(cursor.getCount(), { i ->
if (!cursor.moveToPosition(i)) {
throw RuntimeException("Cursor move failed")
}
Account(context, cursor)
})
return accounts
}
It will throw an IllegalArgumentException:
05-20 10:27:21.120 3337-3337/com.kescoode.yomail E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.kescoode.yomail, PID: 3337
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kescoode.yomail/com.kescoode.yomail.ui.activity.HomeActivity}: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter projection
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5146)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
at dalvik.system.NativeStart.main(Native Method)
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:167)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:420)
at android.content.ContentResolver.query(ContentResolver.java:461)
at android.content.ContentResolver.query(ContentResolver.java:404)
at com.kescoode.yomail.db.Dao.select(internal.kt:33)
at com.kescoode.yomail.db.AccountDao.selectAllAccounts(AccountDao.kt:21)
at com.kescoode.yomail.App.isLogged(App.kt:28)
at com.kescoode.yomail.ui.activity.HomeActivity.onCreate(HomeActivity.kt:17)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169
By default all the variables and parameters in Kotlin are non-null. You are passing a null parameter to your function. If you want to pass null parameter you need to add ?
symbol to your parameter's type, like uri: Uri?
. But better way is to check if the parameter you want to pass to the function is null and handle this situation.
For more information you can check this article http://kotlinlang.org/docs/reference/null-safety.html
这篇关于使用科特林与ContentResolver的引起抛出:IllegalArgumentException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!