【问题标题】:Sinch Service not starting in AndroidSinch 服务未在 Android 中启动
【发布时间】: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


【解决方案1】:

过去几天遇到了同样的问题。

就我而言,这是因为我没有在应用程序节点下的清单中添加以下内容

<service android:name=".SinchService"/>

确保该设置在您的应用程序清单中。这为我解决了。

【讨论】:

    【解决方案2】:

    一切看起来都很好,取消注释注释部分,因为有一个条件正在检查并返回

    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中,正确与否。

    【讨论】:

    • 我已根据我的帐户更改了 App_key 和 App_Secret 密钥
    • 取消注释注释部分。我已经尝试过了,它工作正常或发布你 logcat
    • 我尝试使用注释部分但收到错误。请参考logcat。
    • at calling.LoginActivity.loginClicked(LoginActivity.java:78) 在我的代码中它是 openPlaceCallActivity(); 并删除 getSinchServiceInterface().startClient(userName); 这是在 if (userName.isEmpty()) 之前你也有评论 loginClicked(); 并删除 checkForNull(); 我认为这是造成问题的原因我的代码在更改为您的代码后运行良好。你的代码在我的电脑上运行良好再次检查你的 App_key 和 App_Secret 密钥
    • 我编辑了代码,但在getSinchService中仍然出现错误
    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    相关资源
    最近更新 更多