我刚开始用Kotlin开发Android应用程序,遇到了以下问题:我想建立一个小的登录只是为了好玩。我有点认为这是由于我试图通过v.findViewItemById()
获得文本,但找不到另一种方式/一种方式来绕过它
,但当执行应用程序崩溃时,我的错误java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
我MainActivity。Kt:(删除进口)
class MainActivity : AppCompatActivity(){
private lateinit var B: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
B = ActivityMainBinding.inflate(layoutInflater)
setContentView(B.root)
val btnListener = ButtonClickListener()
B.btnLogin.setOnClickListener(btnListener)
}
}
和ButtonClickListener.kt:
package de.fynnhenck.login.listener
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import de.fynnhenck.login.MainActivity
import de.fynnhenck.login.R
import java.security.AccessController.getContext
class ButtonClickListener : View.OnClickListener {
override fun onClick(v: View?) {
val bu = v as Button
val loginText = v.findViewById<TextView>(R.id.tv_loginText)
val username = v.findViewById<EditText>(R.id.et_username)
val password = v.findViewById<EditText>(R.id.et_password)
if(username.text.equals("user") and password.text.equals("pass")){
loginText.text = "Test"
}
}
}
我希望这足以解释我的问题。提前谢谢你的帮助:)
当您调用View
的findViewById
(btnLogin
是您的情况)时,它尝试在降序视图之间查找。既然tv_loginText
不是按钮的子视图,这一行
val loginText = v.findViewById<TextView>(R.id.tv_loginText)
设置loginText
为null
。
尝试通过binding访问textviews:
class MainActivity : AppCompatActivity(){
private lateinit var B: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
B = ActivityMainBinding.inflate(layoutInflater)
setContentView(B.root)
val btnListener = ButtonClickListener()
B.btnLogin.setOnClickListener(btnListener)
}
class ButtonClickListener : View.OnClickListener {
override fun onClick(v: View?) {
val bu = v as Button
val loginText = B.tvLoginText // LIKE THIS
...
}
}
我相信它的崩溃,因为onClick(v:视图?)只包含你的按钮的视图,而不是你的2其他editText和你得到null。
为什么两个文件,而不是直接在MainActivity中添加这个逻辑?
B.btnLogin.setOnClickListener {
if(B.username.text.equals("user") && B.password.text.equals("pass")){
B.loginText.text = "Test"
}
}