(android.view.View$OnClickListener)' 在一个空对象引用 Kotlin
Posted
技术标签:
【中文标题】(android.view.View$OnClickListener)\' 在一个空对象引用 Kotlin【英文标题】:(android.view.View$OnClickListener)' on a null object reference Kotlin(android.view.View$OnClickListener)' 在一个空对象引用 Kotlin 【发布时间】:2019-11-28 14:55:02 【问题描述】:我知道以前有人问过很多类似的问题,但通常都是用 Java 编写的。我遵循了多个教程,但每次都出现相同的错误。我关注了this tutorial,它适用于其他脚本。
尝试this answer,但效果不佳。
这个问题是独一无二的,因为其他问题是用 java 编写的,这对我来说并不容易。
这是我的MainActivity
:
class MainActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
NumberVerButton()
private fun NumberVerButton()
next1.setOnClickListener
startActivity(Intent(this, NumberVer::class.java))
错误如下。
E/androidRuntime: FATAL EXCEPTION: main
Process: com.example.wyspiansky, PID: 20258
java.lang.RuntimeException: Unable to start activity ComponentInfocom.example.wyspiansky/com.example.wyspiansky.NumberVer: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
我只想通过单击一个按钮来移动到另一个活动。
【问题讨论】:
What is a NullPointerException, and how do I fix it?的可能重复 你的next1
我们为空,你需要在调用NumberVerButton()
之前初始化它
【参考方案1】:
您的next1
变量从未被声明或初始化。我希望这是在某处声明的,否则代码应该会出现编译错误。
因此我的观察是 next1
变量未初始化。您需要将next1
声明为按钮,然后使用findViewById
方法初始化next1
变量,以使用布局中的特定视图引用ID 标记此按钮。
class MainActivity : AppCompatActivity()
var next1: Button? = null
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
next1 = findViewById(R.id.button) as Button
NumberVerButton()
private fun NumberVerButton()
next1?.setOnClickListener
startActivity(Intent(this, MainActivity::class.java))
希望对您有所帮助。
【讨论】:
非常感谢您的帮助。但是现在我有 2 个语法错误。首先:next1 = findViewById(R.id.Button) as Button(R.id.Button 中的按钮是红色的)和 2. next1.setOnClickListener (中间的点是红色的,它告诉我我可以用其中一个替换它?。或!! 其实我想写一个示例代码。这可能有一些语法错误,我认为可以自己处理。 我试图删除语法错误,请立即检查更新的代码。谢谢。【参考方案2】:首先,您需要一个对象来引用,查看您的源代码,您正在使用 next1 对象,该对象未在源代码的任何位置声明。还有谁知道那通常是什么类型的对象
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
class MainActivity : AppCompatActivity()
//First you prepare your objects to use them
private var text1: TextView? = null
private var next1: Button? = null
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//here you assign your references
//between the Layout xml file and your objects
text1 = findViewById(R.id.textView1)
next1 = findViewById(R.id.button1)
//here you set the click listener to your object
// remember, it need to be a View object, in this case
// is a Button which button heirs all from the parent class View
next1!!.setOnClickListener
text1!!.text = "Hello S K, your click listener Works"
您还需要在 android:id xml 属性中为每个对象设置具有相同 id 名称的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_
android:layout_
android:text="Hello World!"/>
<Button
android:id="@+id/button1"
android:layout_
android:layout_/>
</LinearLayout>
基本上,您需要将任何 UI 布局对象附加到源代码以控制它们,如果您没有正确实例化您的对象,您将有 NullPointer 异常,因为您的源代码将尝试引用您的 next1 对象但是它从未被声明过,也没有被实例化。
评论:老实说,如果您想要好的实践,您应该考虑使用 Java 进行开发并继续使用 Kotlin,直到您真正掌握它为止。在某些时候,像我这样的所有老开发人员我们都需要使用 kotlin,但至少现在我不知道有人可以将所有旧源代码复制到 kotlin 而没有任何问题。
【讨论】:
感谢您的帮助!以上是关于(android.view.View$OnClickListener)' 在一个空对象引用 Kotlin的主要内容,如果未能解决你的问题,请参考以下文章
(android.view.View$OnClickListener)' 在一个空对象引用 Kotlin
android/view/view$onUnhandledKeyEventListener (onMeasure 错误)
尝试调用虚拟方法 'void android.widget.Button.setOnClickListener(android.view.View$onClickListener)'
Android Studio:尝试在空对象引用上调用虚拟方法“void android.view.View.setOnClickListener”
Appium 自动化测试:如何从 android [android.view.View] 中的自定义 UI 中获取元素或文本