【发布时间】:2017-04-05 19:12:16
【问题描述】:
我正在尝试Sinch 提供的示例程序,但遇到了 NullPointerException。我追踪了代码,发现是我的设备没有连接到SinchService造成的。
代码如下
public class LoginActivity extends BaseActivity implements SinchService.StartFailedListener {
private Button mLoginButton;
private EditText mLoginName;
private ProgressDialog mSpinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
mLoginName = (EditText) findViewById(R.id.loginName);
mLoginButton = (Button) findViewById(R.id.loginButton);
mLoginButton.setEnabled(false);
mLoginButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
loginClicked();
}
});
}
@Override
protected void onServiceConnected() {
mLoginButton.setEnabled(true);
getSinchServiceInterface().setStartListener(this);
}
@Override
protected void onPause() {
if (mSpinner != null) {
mSpinner.dismiss();
}
super.onPause();
}
@Override
public void onStartFailed(SinchError error) {
Toast.makeText(this, error.toString(), Toast.LENGTH_LONG).show();
if (mSpinner != null) {
mSpinner.dismiss();
}
}
@Override
public void onStarted() {
openPlaceCallActivity();
}
private void loginClicked() {
String userName = mLoginName.getText().toString();
if (userName.isEmpty()) {
Toast.makeText(this, "Please enter a name", Toast.LENGTH_LONG).show();
return;
}
if (!getSinchServiceInterface().isStarted()) {
getSinchServiceInterface().startClient(userName);
showSpinner();
} else {
openPlaceCallActivity();
}
}
private void openPlaceCallActivity() {
Intent mainActivity = new Intent(this, PlaceCallActivity.class);
startActivity(mainActivity);
}
private void showSpinner() {
mSpinner = new ProgressDialog(this);
mSpinner.setTitle("Logging in");
mSpinner.setMessage("Please wait...");
mSpinner.show();
}
}
我可以看到,由于服务没有连接,所以当我调用 getSinchServiceInterface() 时,我没有得到正确的输出。它总是返回 null。我的设备已连接到互联网,Sinch 仪表板中的后端应用似乎也可以正常工作。
LogCat:
12-22 17:43:38.432 2301-2301/com.login_signup_screendesign_demo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.login_signup_screendesign_demo, PID: 2301
java.lang.NullPointerException
at calling.LoginActivity.loginClicked(LoginActivity.java:78)
at calling.LoginActivity.access$000(LoginActivity.java:15)
at calling.LoginActivity$1.onClick(LoginActivity.java:32)
at android.view.View.performClick(View.java:4463)
at android.view.View$PerformClick.run(View.java:18770)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
此错误的原因可能是什么以及如何解决?
更新:
我完全复制粘贴了从 page 下载的 android 代码。我正在使用该文件中的 sinch-rtc-sample-calling 应用程序。我单独编译并运行了该应用程序,它运行良好。然后我将该应用程序中的所有 java 和 xml 复制粘贴到我正在工作的应用程序中,但它不工作。为什么会这样。这可能是 NullPointerException 的原因。复制粘贴后,我发现登录按钮被禁用。这意味着onServiceConnected() 没有执行。我尝试手动调用它,这导致了 NPE,但这在独立应用程序中正确发生。我只有在集成时才会遇到这类问题。
PS : 我根据新文件更新了清单和 gradle。
【问题讨论】:
-
很可能是你的导入有问题
-
确保 Sinch SDK 已正确导入和链接。按照 Sinch.com/docs/voice/android 上的步骤操作
-
@cjensen 你可以找到我的完整项目here。请告诉我libs文件夹或gradle依赖的放置是否有任何问题。
-
@Tyson:你解决了这个异常吗??
-
@Androidjack-RajeshGosemath 不,我还没有解决它。我尝试编写自己的界面并设法让应用程序启动并运行,但如果你能解决错误,那将非常有帮助
标签: java android sinch android-sinch-api