Android - 找不到 NullPointerException 的原因

Android - Can't find the reason for NullPointerException

我正在尝试将 Sinch 视频通话集成到我的应用程序中,所以我只是从 Sinch Video-Call Demo App 中复制了所有这些活动和布局,它运行良好。现在我正在尝试删除 LoginActivity,以便使用默认的硬编码 userName 建立调用,而不是从 EditText 获取它。我只对 LoginActivity.javalogin.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?
        }