Android - 找不到NullPointerException的原因

时间:2016-10-25 18:19:30

标签: java android xml nullpointerexception sinch

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

我很抱歉这可能看起来像一个愚蠢的问题,但我已经在过去5个小时内在代码中尽我所能,但仍然无法找到导致问题的原因,因为没有调用{{1}在整个代码中的任何地方。谢谢。

1 个答案:

答案 0 :(得分:1)

在阅读您的修改和相关项目的基础知识库后,我认为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?
        }