【问题标题】:java.lang.IllegalStateException: nicknameTextView must not be nulljava.lang.IllegalStateException:nicknameTextView 不能为空
【发布时间】:2021-01-22 19:24:27
【问题描述】:

我正在尝试执行此 AboutMe 示例,但应用程序不断崩溃并发送错误消息:java.lang.IllegalStateException:nicknameTextView must not be null。

我不明白为什么nicknameTextView 总是返回null。我添加了 println 命令来查看来自 editText 的结果,它可以工作。我知道它与空值有关,并通过阅读其他帖子以某种方式初始化变量,但是我不明白。

谢谢。

package com.example.aboutme

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        findViewById<Button>(R.id.done_button).setOnClickListener(View.OnClickListener {
            addNickname(it)
        })
    }
    private fun addNickname(it: View?) { // funcion para añadir el nick tecleado
        val editText = findViewById<EditText>(R.id.nickname)    // Lee el Nick Tecleado
        val nicknameTextView =
            findViewById<TextView>(R.id.nickname_text)   //Define el texto donde se va a escribir el nick tecledo

        println(editText.text)
        nicknameTextView.text = editText.text
        editText.visibility = View.GONE
        done_button.visibility = View.GONE
        nicknameTextView.visibility = View.VISIBLE
    }
}

MAIN ACTIVITY

<?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_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingStart="@dimen/padding"
    android:paddingEnd="@dimen/padding"
    android:textAlignment="viewStart">

    <TextView
        android:id="@+id/name_text"
        style="@style/NameStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/name"
        android:textAlignment="center" />

    <EditText
        android:id="@+id/nickname"
        style="@style/NameStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="@string/What_is_your_nickname"
        android:inputType="textPersonName"
        android:textAlignment="center" />

    <TextView
        android:id="@+id/nickname_text"
        style="@style/NameStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="none"
        android:textAlignment="center"
        android:visibility="gone" />

    <Button
        android:id="@+id/done_button"
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="@dimen/layout_margin"
        android:fontFamily="@font/roboto"
        android:text="@string/done" />

    <ImageView
        android:id="@+id/star_image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/layout_margin"
        android:contentDescription="@string/yellow_star"
        app:srcCompat="@android:drawable/btn_star_big_on" />

    <ScrollView
        android:id="@+id/bio_scroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/Imagen1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:contentDescription="@string/Imagen1"
                app:srcCompat="@android:drawable/ic_menu_view" />

            <TextView
                android:id="@+id/bio_text"
                style="@style/NameStyle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:lineSpacingMultiplier="1.2"
                android:text="@string/bio_name" />
        </LinearLayout>
    </ScrollView>

</LinearLayout>

【问题讨论】:

    标签: kotlin null textview initialization illegalstateexception


    【解决方案1】:

    与其在每次点击按钮时都初始化,不如在onCreate中初始化一次?例如:

    private lateinit var editText: EditText
    private lateinit var nicknameTextView: TextView
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    
        editText = findViewById(...)
        nicknameTextView = findViewById(...)
       
        ...
    }
    

    然后在需要时调用变量。

    【讨论】:

    • 我尝试了代码,但现在应用程序无法启动并发送以下错误:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.aboutme/com.example.aboutme .MainActivity}: java.lang.IllegalStateException: findViewById(R.id.nickname_text) 不能为空
    • 能否将activity_main XML 添加到原帖中?
    猜你喜欢
    • 1970-01-01
    • 2018-01-23
    • 2017-06-16
    • 2020-10-06
    • 2015-10-27
    • 2017-09-04
    • 2016-08-18
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多