Sinch Service не запускается в Android
Я пробовал примеры программ, предоставленных Sinch
и получал исключение NullPointerException. Я проследил код и обнаружил, что он вызван тем, что мое устройство не подключено к Sinch
Обслуживание.
Код выглядит следующим образом
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()
, Всегда возвращает ноль. Мое устройство подключено к Интернету, а бэкэнд-приложение в 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)
Что может быть причиной этой ошибки и как ее решить?
ОБНОВИТЬ:
Я точно скопировал и вставил код Android, загруженный с этой страницы. Я использую приложение sinch-rtc-sample-calling из этого файла. Я скомпилировал и запустил приложение отдельно, и оно работало нормально. Затем я скопировал и вставил все java и xml из этого приложения в то, с которым я работаю, и оно не работает. Почему это происходит. Это может быть причиной исключения NullPointerException. После вставки копии я обнаружил, что кнопка входа отключена. Это означает, что onServiceConnected()
не выполняется. Я попытался вызвать его вручную, и в результате NPE, но это происходит правильно в автономном приложении. Я получаю такие проблемы только после интеграции.
PS: я обновил манифест и gradle согласно новым файлам.
2 ответа
Имели ту же проблему в течение последних нескольких дней.
В моем случае это потому, что я не добавил следующее в манифест под узлом приложения
<service android:name=".SinchService"/>
Убедитесь, что параметр указан в манифесте приложения. Это решило это для меня.
Все выглядит хорошо, раскомментируйте закомментированную часть, потому что есть одно условие, которое проверяется, и оно возвращает
private boolean isStarted() {
return (mSinchClient != null && mSinchClient.isStarted());
}
прежде чем получить SinchService, а также проверить ваш
private static final String APP_KEY = "app_key";
private static final String APP_SECRET = "app_secret";
private static final String ENVIRONMENT = "sandbox.sinch.com";
в SinchService.java
, являются правильными или нет.