Исключение нулевого указателя при попытке доступа к EditText из другого действия в Kotlin - PullRequest
0 голосов
/ 11 октября 2018

РЕДАКТИРОВАТЬ: Решено с помощью startActivityForResult ()

в Kotlin. Я пытаюсь установить содержимое EditText моей основной деятельности из метода HandleResult операции сканирования штрих-кода, и я получаю NPE.Я прочитал https://kotlinlang.org/docs/tutorials/android-plugin.html

Это операция сканирования штрих-кода

import kotlinx.android.synthetic.main.activity_main.*

...

override fun handleResult(rawResult: Result) {
    Toast.makeText(this, "Contents = " + rawResult.text +
            ", Format = " + rawResult.barcodeFormat.toString(), Toast.LENGTH_SHORT).show()
    doAsync {
        val url = "https://www.amazon.com/s/field-keywords=${rawResult.text}"
        val dom = Jsoup.connect(url).get()
        val title = dom.select("h2[class^=a-size-medium]")
        onComplete {
            txt_keyword.setText(title[0].text()) // <--- NPE crash
            onBackPressed()
        }
    }

Я получаю сообщение об ошибке:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.setText(java.lang.CharSequence)' on a null object reference
    at <mypackagename>.ScanActivity$handleResult$1$1.invoke(ScanActivity.kt:56)
    at <mypackagename>.ScanActivity$handleResult$1$1.invoke(ScanActivity.kt:20)
    at org.jetbrains.anko.AsyncKt$onComplete$1.run(Async.kt:57)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6940)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Когда Ctrl + Вход в систему "txt_keyword ", я перехожу к соответствующей части activity_main.xml

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 11 октября 2018

В Android вы не должны получать доступ к содержимому действия из другого действия, вам нужно иметь метод handleResult () в основном действии и использовать startActivityForResult () для запуска штрих-кода.затем обработайте результат основного действия, или вы можете передать содержимое редактируемого текста из основного действия в действие штрихового кода через Intent with Bundle , а затем обработать результат в операции BarCode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...