Многократный загрузчик Перезвоните Android - PullRequest
0 голосов
/ 30 августа 2018

Я пробовал этот код:

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, но проблема в том, что я не могу преобразовать свою строку (один из результатов от загрузчика) в Obejcts.

как сделать несколько загрузчиков в одноразовой активности

1 Ответ

0 голосов
/ 31 августа 2018

Вы ошиблись при взаимодействии с Java - по какой-то причине в Kotlin IDE сгенерированы методы переопределения с несовместимой подписью.

  1. Попробуйте вместо этого использовать supportLoaderManager - loaderManager устарела, но она уже несовместима с некоторыми версиями.

  2. Неверная подпись отмены (обнуляемый параметр указан как ненулевой):

override fun onCreateLoader(id: Int, args: Bundle): Loader<String>? вылетает, потому что args может быть нулевым, и он никогда не должен возвращать нулевое значение, поэтому измените его на: override fun onCreateLoader(id: Int, args: Bundle?): Loader<String>.

onLoadFinished и onLoaderReset никогда не предоставят загрузчик null, так что вы можете удалить проверку обнуляемости из Loader<String>? там.

...