Android Kotlin findViewById(R.id.txt_email) 不能为空

Posted

技术标签:

【中文标题】Android Kotlin findViewById(R.id.txt_email) 不能为空【英文标题】:Android Kotlin findViewById(R.id.txt_email) must not be null 【发布时间】:2022-01-19 23:33:06 【问题描述】:

我是学生,所以我是初学者,我确实在这里找到了这个问题,但我不明白如何在我的代码中解决这个问题 如您所见,对于了解 kotlin 的人来说,这是一个简单的代码 当我按下按钮注册时,我只想开始注册活动

这是mainActivity代码:

package com.example.myclass

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView


class MainActivity : AppCompatActivity() 


    private lateinit var txtEmail: TextView
    private lateinit var edtEmail: EditText
    private lateinit var txtPassword: TextView
    private lateinit var edtPassword: EditText
    private lateinit var btnContinue: Button
    private lateinit var btnSignUp: Button
    private lateinit var btnFcb: Button


    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        txtEmail=findViewById(R.id.txt_email)
        edtEmail=findViewById(R.id.edt_email)
        txtPassword=findViewById(R.id.txt_password)
        edtPassword=findViewById(R.id.edt_password)
        btnContinue=findViewById(R.id.btn_continue)
        btnSignUp=findViewById(R.id.btn_signup)
        btnFcb=findViewById(R.id.btn_fcb)

        btnSignUp.setOnClickListener 
            val intent=Intent(this,signUp::class.java)
            startActivity(intent)
        
    

这是 MainActivity 的 XML 代码:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:layout_gravity="center_horizontal"
    android:background="@color/blue_ligth"
    android:orientation="vertical"

    tools:context=".MainActivity">


    <ImageView
        android:id="@+id/img_logo"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:layout_marginTop="1dp"
        android:src="@drawable/nice" />

    <TextView
        android:id="@+id/txt_email"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:layout_marginRight="20dp"
        android:fontFamily="@font/rubik_bold"
        android:text="Email"
        android:textColor="@color/white"
        android:textSize="20dp" />

    <EditText
        android:id="@+id/edt_email"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="5dp"
        android:layout_marginRight="20dp"
        android:background="@drawable/edt_backgound"
        android:hint="MyClass@gmail.com"
        android:textAlignment="center"
        android:textColorHint="@color/blue_ligth"
        android:textSize="26dp"
        android:backgroundTint="@color/white"
        />

    <TextView
        android:id="@+id/txt_password"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="15dp"
        android:layout_marginRight="20dp"
        android:fontFamily="@font/rubik_bold"
        android:text="Password"
        android:textColor="@color/white"
        android:textSize="20dp" />

    <EditText
        android:id="@+id/edt_password"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="5dp"
        android:layout_marginRight="20dp"
        android:background="@drawable/edt_backgound"
        android:backgroundTint="@color/white"
        android:fontFamily="@font/rubik_bold"
        android:hint="●●●●●●●●●●●●●●"
        android:textAlignment="center"
        android:textColorHint="@color/blue_ligth"
        android:textSize="26dp" />

    <Button
        android:id="@+id/btn_continue"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="100dp"
        android:layout_marginRight="20dp"
        android:background="@drawable/bt_background"
        android:fontFamily="@font/rubik_bold"
        android:text="continue"
        android:textColor="@color/blue_ligth"
        android:textSize="20dp" />

    <Button
        android:id="@+id/btn_signup"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:layout_marginRight="20dp"
        android:background="@drawable/edt_backgound"
        android:fontFamily="@font/rubik_bold"
        android:text="sign up"
        android:textColor="@color/white"
        android:textSize="20dp" />

    <Button
        android:id="@+id/btn_fcb"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:layout_marginRight="20dp"
        android:background="@drawable/bt2_3_background"
        android:fontFamily="@font/rubik_bold"
        android:text="login with facebook"
        android:textColor="@color/white"
        android:textSize="20dp" />

这是图片中的错误:

这是有错误的代码:

这是错误代码:

    E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myclass, PID: 17363
    java.lang.RuntimeException: Unable to start activity ComponentInfocom.example.myclass/com.example.myclass.MainActivity: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at com.example.myclass.MainActivity.onCreate(MainActivity.kt:28)
        at android.app.Activity.performCreate(Activity.java:8000)
        at android.app.Activity.performCreate(Activity.java:7984)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
W/System: A resource failed to call close. 

【问题讨论】:

你确定没有另一个布局叫做activity_main吗?有时会为垂直和水平方向创建两种布局。 是的,如果您有相同布局的两个版本,您可能希望确保所有相同的视图 ID 在两个版本中。 是时候使用ViewBinding了 @lyncx 我该如何检查它 val txtEmai: TextView= find(R.id.txt_email) jusr tryb 这样可能行得通 【参考方案1】:

请查看“viewBinding”。在您的项目中实施它几乎不需要 15 分钟(也许更少)。它是为了解决这类问题而创建的

这次是我...

class MainActivity : AppCompatActivity() 

    //To add
    lateinit var binding: ActivityMainBinding
    
    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)

        //To add
        binding = ActivityMainBinding.inflate(layoutInflater)

        //To remove
//        setContentView(R.layout.activity_main)
//        txtEmail=findViewById(R.id.txt_email)
//        edtEmail=findViewById(R.id.edt_email)
//        txtPassword=findViewById(R.id.txt_password)
//        edtPassword=findViewById(R.id.edt_password)
//        btnContinue=findViewById(R.id.btn_continue)
//        btnSignUp=findViewById(R.id.btn_signup)
//        btnFcb=findViewById(R.id.btn_fcb)

        binding.btnSignup.setOnClickListener 
//            val intent= Intent(this,signUp::class.java)
//            startActivity(intent)
        

    

每次您想使用视图时,只需调用 [绑定。“Your_view_id_here”]

别忘了在你的 build.gradle(模块)文件中添加这个

android
 //...

   buildFeatures 
       viewBinding true
   



【讨论】:

【参考方案2】:

您需要检查两件事。

    检查 ID 为 txt_email 的视图是否确实存在于您的布局文件中。

    检查您是否错误地从另一个布局文件中导入了同名 ID。您可以通过查看导入行轻松确认这一点。检查您没有从完全不同的片段中导入 ID。

另外,我认为您应该花时间了解 DataBinding 和 ViewBinding。这是避免这种情况的一种廉价方法。

【讨论】:

以上是关于Android Kotlin findViewById(R.id.txt_email) 不能为空的主要内容,如果未能解决你的问题,请参考以下文章

正向计时器:Android录音录屏时的计时器

“kotlin-android”和“org.jetbrains.kotlin.android”是一样的吗?

android 怎么逆向kotlin

Android@Kotlin 在Android studio 中配置Kotlin

Android@Kotlin 在Android studio 中配置Kotlin

Android@Kotlin 在Android studio 中配置Kotlin