尝试从 Kotlin 中的另一个活动访问 EditText 时出现空指针异常

Posted

技术标签:

【中文标题】尝试从 Kotlin 中的另一个活动访问 EditText 时出现空指针异常【英文标题】:Null-Pointer Exception when trying to access an EditText from another activity in Kotlin 【发布时间】:2019-03-16 21:19:46 【问题描述】:

编辑:使用startActivityForResult()解决

在 Kotlin 中,我试图从条形码扫描活动的 HandleResult 方法中设置我的主要活动的 EditText 的内容,我得到了一个 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)

"txt_keyword"Ctrl+Entering 时,我会跳转到 activity_main.xml 的相关部分!

【问题讨论】:

这个handleResult() 方法什么时候被调用?为避免崩溃,您可以放置​​ null 安全运算符。 不要尝试从另一个 Activity 访问一个 Activity 中的视图。使用 Intent 传递数据(例如使用 startActivity() )或将数据写入存储并在带有 View 的 Activity 再次处于前台时检索它 【参考方案1】:

在android中,你不应该从另一个activity访问一个activity的内容,你应该做的是在主activity中使用handleResult()方法并使用startActivityForResult()启动Bar code activity然后处理来自主活动,或者您可以通过Intent with a Bundle 将主活动中的编辑文本内容传递给条形码活动,然后在条形码活动中处理结果。

【讨论】:

一百万次谢谢!感谢您提供的链接和***.com/questions/37768604/…,我现在使用 startActivityForResult 获得了预期的结果。谢谢!

以上是关于尝试从 Kotlin 中的另一个活动访问 EditText 时出现空指针异常的主要内容,如果未能解决你的问题,请参考以下文章

将一个 mutableList 从活动 A 传递到 Kotlin 中的活动 B。

将接口从片段传递到kotlin中的活动

从当前项目中的另一个模块启动 MainActivity

使用绑定从片段访问父活动的 UI 元素

如何从 kotlin 中的内部对象类访问类级别变量

使用kotlin从android中的BroadcastReceiver类访问edittext