Android 使用setOnClickListener并获取;潜在的NullPointerException。某些布局版本中缺少资源
我使用下面的代码来使用Android 使用setOnClickListener并获取;潜在的NullPointerException。某些布局版本中缺少资源,android,xml,kotlin,Android,Xml,Kotlin,我使用下面的代码来使用setOnClickListener,每次我运行程序时,它都会在运行前崩溃。我得到“应用程序已停止” 在logcat中,它给出了以下错误: 2019-04-02 16:03:26.184 6592-6592/com.example.swoosh E/AndroidRuntime: 致命异常:主 流程:com.example.swoosh,PID:6592 java.lang.RuntimeException:无法启动活动组件信息{com.example.swoosh/com
setOnClickListener
,每次我运行程序时,它都会在运行前崩溃。我得到“应用程序已停止”
在logcat中,它给出了以下错误:
2019-04-02 16:03:26.184 6592-6592/com.example.swoosh E/AndroidRuntime:
致命异常:主
流程:com.example.swoosh,PID:6592
java.lang.RuntimeException:无法启动活动组件信息{com.example.swoosh/com.example.swoosh.MainActivity}:
java.lang.NullPointerException:尝试调用虚拟方法“void”
android.widget.Button.setOnClickListener(android.view.view$OnClickListener)'
关于空对象引用
如果我取出代码的setOnClickListener
部分,程序就会运行。下面是导致错误的代码部分。下面,我将发布XML布局中切换按钮所在的部分
我使用的是Android Studio 3.3.2,我在这里遗漏了什么
getStartedBtn.setOnClickListener {
val leagueIntent=Intent(this, leagueActivity::class.java)
startActivity(leagueIntent)
}
确保纵向和横向布局中都存在ID相同的按钮。MainActivity.kt activity_main.xml
别忘了在AndroidManifest上声明联盟活动
<activity android:name=".LeagueActivity" />
我让它工作了。我改变了两件事,不确定是什么做的,但我运行了这个程序,它成功了:
谢谢大家的帮助。这是我在这里发表的第一篇文章,人们如此迅速地提供帮助,我感到惊讶(惊喜)。这里的社区很棒 因此
getStartedBtn
为空。您是否使用findViewById()
对其进行了初始化?可能重复的请发布整个类,不可能知道getStartedBtn是如何实例化的。另外,您的类leagueActivity应该重命名为leagueActivity,并在AndroidManifests上声明。请确保您的getStartedBtn
已正确初始化,然后再对其调用setOnClickListener
。Hi Bruno的可能重复,我已按照您的建议使用大写字母重命名了leagueActivity。我仍然得到同样的错误。谢谢你,因为我不知道小写是个问题。至于答案的剩余部分,您是否建议我使用您发布的代码创建一个新的.kt文件MainActivity?很抱歉,我不想这么说,但我是一个新手,仍然在学习。我按照建议更改了类MainActivity,但仍然收到相同的错误。在这种情况下,如果您提供更多代码,会更好。好的,我现在将在编辑帖子中添加更多代码。非常感谢大家的帮助。
//this is full welcomeActivity.kt file
package com.example.swoosh
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_welcome.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_welcome)
getStartedBtn.setOnClickListener {
startActivity(Intent(this, LeagueActivity::class.java))
}
}
}
Side note: the "getStartedBtn" is highlighed yellow and when I hold mouse over it, it says "Potential Null Pointer exception. The resource is missing in some of layout versions"
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.swoosh">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".LeagueActivity">
</activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts"/>
</application>
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
getStartedBtn.setOnClickListener {
startActivity(Intent(this, LeagueActivity::class.java))
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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=".MainActivity">
<Button
android:id="@+id/getStartedBtn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="24dp"
android:text="@string/get_started"
android:textColor="@color/colorAccent"
android:textSize="14sp"
android:typeface="normal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintVertical_bias="0.929" />
</android.support.constraint.ConstraintLayout>
<activity android:name=".LeagueActivity" />