我正在尝试将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
。这是原始布局文件login.xml
的链接。这是我的login.xml
。原始LoginActivity.java
和我的LoginActivity.java
我很抱歉这可能看起来像一个愚蠢的问题,但我已经在过去5个小时内在代码中尽我所能,但仍然无法找到导致问题的原因,因为没有调用{{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?
}