【问题标题】:"findViewById must not be null" error in kotlin androidkotlin android中的“findViewById不能为空”错误
【发布时间】:2020-10-18 04:01:15
【问题描述】:

在此活动中,我在 kotlin 中使用 findViewById 获取了三个变量,用于 xml 文件中的三个微调器视图。 每当我运行构建项目时,它都会成功构建,但每当我进入此活动时,应用程序就会停止并关闭。并且“运行”日志显示以下错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sahil.randoms/com.sahil.randoms.activity_name_gender}: java.lang.IllegalStateException: findViewById(R.id.newSpin) must not be null

每当我创建像这样的第三个微调器时都会发生这种情况。 但仅适用于两个微调器。

这里是 kotlin 文件:

package com.sahil.randoms

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Spinner

class activity_name_gender : AppCompatActivity() {

    lateinit var spnGender: Spinner
    lateinit var spnAlphabet: Spinner
    lateinit var newSpin: Spinner

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

        spnGender=findViewById(R.id.spnGender)
        spnAlphabet=findViewById(R.id.spnNation)
        newSpin= findViewById(R.id.newSpin)

        val Gender= arrayOf("Boy","Girl")
        val adapter1=ArrayAdapter(this, android.R.layout.simple_spinner_item ,Gender)
        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spnGender.adapter=adapter1


        val Nation= arrayOf("Hindu","Muslim","Sikh","Christian")
        val adapter2: ArrayAdapter<String> = ArrayAdapter(this@activity_name_gender,android.R.layout.simple_spinner_item,Nation)
        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spnAlphabet.adapter= adapter2


        val new= arrayOf("A","B","C","D","E")
        val adapter3: ArrayAdapter<String> = ArrayAdapter(this@activity_name_gender,android.R.layout.simple_spinner_item,new)
        adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        newSpin.adapter= adapter3

    }
}

xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".activity_name_gender">

    <TextView
        android:id="@+id/txtGender"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:padding="10dp"
        android:textSize="20sp"
        android:background="@drawable/background"
        android:text="Select The Gender"
        android:textAlignment="center"
        android:textColor="#0e2896"
        android:textStyle="bold"/>
    <Spinner
        android:id="@+id/spnGender"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:dropDownWidth="100dp"
        android:forceHasOverlappingRendering="false"
        android:layout_below="@id/txtGender"
        android:layout_centerHorizontal="true"
        android:textAlignment="center"
        android:background="@drawable/background"
        />
    <TextView
        android:id="@+id/txtNation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/spnGender"
        android:layout_marginTop="100dp"
        android:textSize="20sp"
        android:padding="10dp"
        android:background="@drawable/background"
        android:text="Select The Nationality"
        android:textAlignment="center"
        android:textColor="#0e2896"
        android:textStyle="bold"/>
    <Spinner
        android:id="@+id/spnNation"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:dropDownWidth="100dp"
        android:textAlignment="center"
        android:layout_below="@id/txtNation"
        android:layout_centerHorizontal="true"
        android:background="@drawable/background"
        />
    <Spinner
        android:id="@+id/newSpin"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="70dp"
        android:dropDownWidth="100dp"
        android:textAlignment="center"
        android:layout_below="@id/spnNation"
        android:layout_centerHorizontal="true"
        android:background="@drawable/background"
        />

</RelativeLayout>

请帮忙.. 在此先感谢:)

【问题讨论】:

    标签: android xml android-studio kotlin spinner


    【解决方案1】:

    如果您使用setContentView 填充正确的布局文件,那么在您发布的代码中一切看起来都很好——具有该ID 的视图在那里,所以findViewById 不应该返回null。尝试在 Build 菜单中运行 Clean,或者如果这不起作用,在 File 菜单中运行 Invalidate Caches / Restart - 有时 R 文件会混淆 ID

    【讨论】:

    • 感谢您的回复 :) 是的!我正在用同名膨胀不同的fie。现在我已经解决了。
    【解决方案2】:

    如果您使用 Kotlin 进行编码,则不必使用 findViewById。而不是这个尝试synthetics。在您的build.gradle 文件中,在apply plugin: 'kotlin-android' 下方添加这一行apply plugin: 'kotlin-android-extensions'。在此之后,您将能够通过其 id 作为变量来引用您的视图。例如,您可以将 spnGendersynthetic 导入一起使用,而不是这一行 spnGender=findViewById(R.id.spnGender)。更多详细信息请阅读here

    【讨论】:

    • 感谢您的回复 :) 但它仅在最后一个变量上显示错误。我能够访问视图。但只有上两个变量。下面的一个,即 newSpin 有异常。希望你能理解我的问题:)请帮忙
    【解决方案3】:

    首先,在 kotlin 中,您不必通过 id 查找视图,视图会自动从您的 Activity/片段中定义的布局中绑定,只需像这样直接在类中获取您的视图 id,

    override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_name_gender)
    
            val Gender= arrayOf("Boy","Girl")
            val adapter1=ArrayAdapter(this, android.R.layout.simple_spinner_item ,Gender)
            adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            spnGender.adapter=adapter1
    
    
            val Nation= arrayOf("Hindu","Muslim","Sikh","Christian")
            val adapter2: ArrayAdapter<String> = ArrayAdapter(this@activity_name_gender,android.R.layout.simple_spinner_item,Nation)
            adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            spnNation.adapter= adapter2
    
    
            val new= arrayOf("A","B","C","D","E")
            val adapter3: ArrayAdapter<String> = ArrayAdapter(this@activity_name_gender,android.R.layout.simple_spinner_item,new)
            adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            newSpin.adapter= adapter3
    
        }
    

    其次,使用推荐的命名约定,你的活动名称应该像ActivityNameGender,你的xml名称就可以了。

    最后会是这样的

    class ActivityNameGender: AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_name_gender)
    
            val Gender= arrayOf("Boy","Girl")
            val adapter1=ArrayAdapter(this, android.R.layout.simple_spinner_item ,Gender)
            adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            spnGender.adapter=adapter1
    
    
            val Nation= arrayOf("Hindu","Muslim","Sikh","Christian")
            val adapter2: ArrayAdapter<String> = ArrayAdapter(this@activity_name_gender,android.R.layout.simple_spinner_item,Nation)
            adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            spnNation.adapter= adapter2
    
    
            val new= arrayOf("A","B","C","D","E")
            val adapter3: ArrayAdapter<String> = ArrayAdapter(this@activity_name_gender,android.R.layout.simple_spinner_item,new)
            adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            newSpin.adapter= adapter3
    
        }
    }
    

    希望问题的答案:)

    【讨论】:

    • 在考虑了您的意见后,我尝试了,但它仍然显示该异常:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sahil.randoms/com.sahil.randoms.activity_name_gender }: java.lang.IllegalStateException: this.newSpin 不能为 null 它是第三个变量,即 newSpin 。不知道没有这个变量会发生什么,其他两个工作正常。但有了这个,它就显示了这个异常。
    • 在更改和日志后显示您的活动类别
    • 谢谢!我在膨胀错误的 xml 文件。现在解决了:)
    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2018-05-04
    • 2021-06-27
    • 2018-03-21
    相关资源
    最近更新 更多