我试图将Sinch视频通话集成到我的应用程序中,所以我只是从Sinch Video-Call Demo App复制了所有这些Activity和Layouts,并且效果很好。现在,我尝试删除LoginActivity,以便使用默认的硬编码userName建立呼叫,而不是从EditText获取它。而且我只对LoginActivity.javalogin.xml布局文件进行了更改。

但是现在,该活动启动后,便因该错误而崩溃。

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。这是原始布局文件login.xml的链接。这是我的login.xml。原始LoginActivity.java和我的LoginActivity.java

抱歉,这似乎是一个愚蠢的问题,但是在过去的5个小时中,我已经尝试了所有可以在代码中进行的操作,但仍然找不到导致问题的原因,因为整个地方都没有调用setEnabled码。谢谢。

最佳答案

阅读您的修改和相关项目的基础存储库后,我认为NullPointerException的原因如下:

启动LoginActivity后,它立即以LoginActivity#loginClicked()执行,从而立即开始下一个活动

private void openPlaceCallActivity() {
    Intent mainActivity = new Intent(this, PlaceCallActivity.class);
    startActivity(mainActivity);
}


...在android.app.ActivityThread.performLaunchActivity ...

PlaceCallActivity扩展了BaseActivity,从而修改了服务生命周期,因此可能在PlaceCallActivity#onServiceConnected之前调用PlaceCallActivity#onCreate ...巧合的是,它可能具有未初始化的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?
        }

10-06 06:45