&引用;findViewById不能为null“;kotlin android中的错误
在这个活动中,我在kotlin中使用findViewById为xml文件中的三个微调器视图获取了三个变量。 每当我运行构建项目时,它就会成功构建,但每当我进入此活动时,应用程序就会停止并关闭。“运行”日志显示以下错误:&引用;findViewById不能为null“;kotlin android中的错误,android,xml,android-studio,kotlin,spinner,Android,Xml,Android Studio,Kotlin,Spinner,在这个活动中,我在kotlin中使用findViewById为xml文件中的三个微调器视图获取了三个变量。 每当我运行构建项目时,它就会成功构建,但每当我进入此活动时,应用程序就会停止并关闭。“运行”日志显示以下错误: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sahil.randoms/com.sahil.randoms.activity_name_gender}: java.lang.Ille
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
}
}
package com.sahil.randoms
导入androidx.appcompat.app.appcompat活动
导入android.os.Bundle
导入android.widget.ArrayAdapter
导入android.widget.Spinner
班级活动\姓名\性别:AppCompatActivity(){
lateinit变量spnGender:微调器
lateinit var spnAlphabet:微调器
lateinit var newSpin:微调器
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u name\u性别)
spnGender=findviewbyd(R.id.spnGender)
spnAlphabet=findViewById(R.id.spnNation)
newSpin=findviewbyd(R.id.newSpin)
val性别=排列(“男孩”、“女孩”)
val adapter1=ArrayAdapter(这个,android.R.layout.simple\u微调器项目,性别)
adapter1.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项)
spnGender.适配器=适配器1
val Nation=arrayOf(“印度教”、“穆斯林”、“锡克教”、“基督教”)
val适配器2:ArrayAdapter=ArrayAdapter(this@activity_name_gender,android.R.layout.simple\u微调器\u项目,国家)
adapter2.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项)
spnAlphabet.adapter=适配器2
val new=排列(“A”、“B”、“C”、“D”、“E”)
val适配器3:ArrayAdapter=ArrayAdapter(this@activity_name_gender,android.R.layout.simple\u微调器\u项目,新建)
adapter3.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项)
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>
请帮忙。。
提前感谢:)如果您使用Kotlin进行编码,则不必使用
findViewById
。请尝试使用synthetics
,而不要使用此选项。在build.gradle
文件中,在apply plugin:'kotlin android extensions'
下面添加这一行apply plugin:'kotlin android'
。在此之后,您将能够通过视图id作为变量引用视图。例如,您可以将spnGender
与synthetic
导入一起使用,而不使用此行spnGender=findViewById(R.id.spnGender)
。欲了解更多详细信息,请阅读。首先,在kotlin中,您不必通过其id查找视图,视图会从活动/片段中定义的布局自动绑定,只需在类中直接获取视图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
}
override-fun-onCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u name\u性别)
val性别=排列(“男孩”、“女孩”)
val adapter1=ArrayAdapter(这个,android.R.layout.simple\u微调器项目,性别)
adapter1.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项)
spnGender.适配器=适配器1
val Nation=arrayOf(“印度教”、“穆斯林”、“锡克教”、“基督教”)
val适配器2:ArrayAdapter=ArrayAdapter(this@activity_name_gender,android.R.layout.simple\u微调器\u项目,国家)
adapter2.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项)
spnNation.adapter=适配器2
val new=排列(“A”、“B”、“C”、“D”、“E”)
val适配器3:ArrayAdapter=ArrayAdapter(this@activity_name_gender,android.R.layout.simple\u微调器\u项目,新建)
adapter3.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项)
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
}
}
class ActivityName性别:AppCompativeActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u name\u性别)
val性别=排列(“男孩”、“女孩”)
val adapter1=ArrayAdapter(这个,android.R.layout.simple\u微调器项目,性别)
adapter1.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项)
spnGender.适配器=适配器1
val Nation=arrayOf(“印度教”、“穆斯林”、“锡克教”、“基督教”)
val适配器2:ArrayAdapter=ArrayAdapter(this@activity_name_gender,android.R.layout.simple\u微调器\u项目,国家)
adapter2.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项)
spnNation.adapter=适配器2
val new=排列(“A”、“B”、“C”、“D”、“E”)
val适配器3:ArrayAdapter=ArrayAdapter(this@activity_name_gender,android.R.layout.simple\u微调器\u项目,新建)
adapter3.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项)
newSpin.adapter=adapter3
}
}
希望找到问题的答案:)如果您使用
setContentView
扩展正确的布局文件,那么您发布的代码中的所有内容看起来都很好-其中包含一个具有该ID的视图,因此findViewById
不应返回null。尝试运行Build
菜单中的Clean
,或者如果这不起作用,File
菜单中的Invalidate Caches/Restart
-有时R
文件在考虑您的意见后会对ID产生混淆,我尝试过,但仍然显示异常:java.lang.RuntimeException:无法启动activity ComponentInfo{com.sahil.randoms/com.sahil.randoms.activity_name_gender}:java.lang.IllegalStateException:this.newSpin不能为空这是第三个变量,即newSpin。如果没有这个变量,我不知道会发生什么其他两个变量正在为