Android - 找不到 NullPointerException 的原因
Android - Can't find the reason for NullPointerException
我正在尝试将 Sinch 视频通话集成到我的应用程序中,所以我只是从 Sinch Video-Call Demo App 中复制了所有这些活动和布局,它运行良好。现在我正在尝试删除 LoginActivity
,以便使用默认的硬编码 userName
建立调用,而不是从 EditText
获取它。我只对 LoginActivity.java
和 login.xml
布局文件进行了更改。
但是现在,Activity 一启动,它就崩溃并出现此错误。
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.yankee.cw/com.example.yankee.cw.LoginActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setEnabled(boolean)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2462)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5471)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setEnabled(boolean)' on a null object reference
但是在整个代码中没有任何地方有 setEnabled
调用任何 Button
对象。这是一个link到原始布局文件login.xml
. And here is mine login.xml
. OriginalLoginActivity.java
and mine LoginActivity.java
很抱歉,这似乎是一个愚蠢的问题,但在过去的 5 个小时里,我已经在代码中尝试了所有可能的方法,但我仍然找不到导致问题的原因,因为没有调用 setEnabled
整个代码中的任何地方。谢谢。
阅读您的修改和相关项目的基础存储库后,我认为 NullPointerException
的原因如下:
启动 LoginActivity
后,它会立即执行 LoginActivity#loginClicked()
,然后立即开始下一个 activity
private void openPlaceCallActivity() {
Intent mainActivity = new Intent(this, PlaceCallActivity.class);
startActivity(mainActivity);
}
...在android.app.ActivityThread.performLaunchActivity...
PlaceCallActivity
extends BaseActivity
修改了服务生命周期,因此可能会在 PlaceCallActivity#onCreate
之前调用 PlaceCallActivity#onServiceConnected
...巧合的是可能有一个未初始化的 mCallButton
PlaceCallActivity#onServiceConnected
@Override
protected void onServiceConnected() {
TextView userName = (TextView) findViewById(R.id.loggedInName);
userName.setText(getSinchServiceInterface().getUserName());
mCallButton.setEnabled(true); // <--- might try changing this?
}
我正在尝试将 Sinch 视频通话集成到我的应用程序中,所以我只是从 Sinch Video-Call Demo App 中复制了所有这些活动和布局,它运行良好。现在我正在尝试删除 LoginActivity
,以便使用默认的硬编码 userName
建立调用,而不是从 EditText
获取它。我只对 LoginActivity.java
和 login.xml
布局文件进行了更改。
但是现在,Activity 一启动,它就崩溃并出现此错误。
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.yankee.cw/com.example.yankee.cw.LoginActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setEnabled(boolean)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2462)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5471)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setEnabled(boolean)' on a null object reference
但是在整个代码中没有任何地方有 setEnabled
调用任何 Button
对象。这是一个link到原始布局文件login.xml
. And here is mine login.xml
. OriginalLoginActivity.java
and mine LoginActivity.java
很抱歉,这似乎是一个愚蠢的问题,但在过去的 5 个小时里,我已经在代码中尝试了所有可能的方法,但我仍然找不到导致问题的原因,因为没有调用 setEnabled
整个代码中的任何地方。谢谢。
阅读您的修改和相关项目的基础存储库后,我认为 NullPointerException
的原因如下:
启动 LoginActivity
后,它会立即执行 LoginActivity#loginClicked()
,然后立即开始下一个 activity
private void openPlaceCallActivity() {
Intent mainActivity = new Intent(this, PlaceCallActivity.class);
startActivity(mainActivity);
}
...在android.app.ActivityThread.performLaunchActivity...
PlaceCallActivity
extends BaseActivity
修改了服务生命周期,因此可能会在 PlaceCallActivity#onCreate
之前调用 PlaceCallActivity#onServiceConnected
...巧合的是可能有一个未初始化的 mCallButton
PlaceCallActivity#onServiceConnected
@Override
protected void onServiceConnected() {
TextView userName = (TextView) findViewById(R.id.loggedInName);
userName.setText(getSinchServiceInterface().getUserName());
mCallButton.setEnabled(true); // <--- might try changing this?
}