我试图将Sinch视频通话集成到我的应用程序中,所以我只是从Sinch Video-Call Demo App复制了所有这些Activity和Layouts,并且效果很好。现在,我尝试删除LoginActivity
,以便使用默认的硬编码userName
建立呼叫,而不是从EditText
获取它。而且我只对LoginActivity.java
和login.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?
}