我试过这段代码:
loaderManager.initLoader(99, null, object : LoaderManager.LoaderCallbacks<String> {
override fun onCreateLoader(id: Int, args: Bundle): Loader<String>? {
val baseUri = Uri.parse("xxxxxx") //this is a private web, so i can't show it to you
val uriBuilder = baseUri.buildUpon()
Log.i("URI BUILDER:", uriBuilder.toString())
return InputProductLoader(applicationContext, uriBuilder.toString(), product)
}
override fun onLoadFinished(loader: Loader<String>?, data: String?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
Toast.makeText(applicationContext, "TEST", Toast.LENGTH_SHORT).show()
}
override fun onLoaderReset(loader: Loader<String>?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
})
我想在一个活动中有2个加载器,每个加载器都会有这样的回调(它们彼此有不同的返回类型),但问题是它不起作用。如果我实现该代码,我的应用程序强行关闭。 (这次我只做一个装载机)
这些是日志
08-31 15:52:05.795 2914-2914/id.devcamp.expiredat E/AndroidRuntime: FATAL EXCEPTION: main
Process: id.devcamp.expiredat, PID: 2914
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter args
at id.devcamp.expiredat.InputProductActivity$onCreate$3$1.onCreateLoader(InputProductActivity.kt)
at android.app.LoaderManagerImpl.createLoader(LoaderManager.java:546)
at android.app.LoaderManagerImpl.createAndInstallLoader(LoaderManager.java:555)
at android.app.LoaderManagerImpl.initLoader(LoaderManager.java:609)
at id.devcamp.expiredat.InputProductActivity$onCreate$3.onClick(InputProductActivity.kt:68)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
我试图让我的活动实现LoaderManager.LoaderCallbacks,但问题是我无法将我的String(加载器的结果之一)转换为Obejcts。
那么如何在一个活动中创建多个加载器
您因不正确的Java互操作而陷入困境 - 由于某种原因,Kotlin IDE生成了具有不兼容签名的覆盖方法。
supportLoaderManager
代替 - loaderManager
已被弃用但已经对某些版本不一致。override fun onCreateLoader(id: Int, args: Bundle): Loader<String>?
崩溃,因为args
可以为null,它应该永远不会返回null,所以将其更改为:override fun onCreateLoader(id: Int, args: Bundle?): Loader<String>
。
onLoadFinished
和onLoaderReset
将永远不会提供null
装载机,因此您可以从那里的Loader<String>?
中删除可空性检查。