使用Otto.Bus Post和@subscribe未被调用

时间:2016-12-28 01:31:59

标签: android android-activity android-asynctask otto

我正在尝试让@Subscribe AsyncTask 回拨活动。我已经阅读了Otto技术文档,并且还在线阅读了很多不同的文章以及堆栈,但它们似乎都没有帮助我解决我的问题。

AsynTask完美调用并在我的日志中注明,我甚至可以从帖子请求中获得响应。我正在注册otto并取消注册,正如我在其他问题和技术文档中看到的那样。

我通过从SignupActivity传递适当的参数来执行我的任务:

new SignupTask(SignupActivity.this,
                                (questionPosition + 1),
                                response.getEditText().getText().toString(),
                                FirstName.getEditText().getText().toString(),
                                LastName.getEditText().getText().toString(),
                                Mail.getEditText().getText().toString(),
                                Pass.getEditText().getText().toString(),
                                "0.0.0.0").execute();
然后

我的SignupTask进行异步调用:

 @Override
public Integer call() throws Exception {
    android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
    client.getAPIInterface().SignUp(new TaskRequests.SignUpRequest(firstNameString,
            lastNameString,
            email,
            pass,
            pass),new Callback<String>() {
        @Override
        public void success(String msg, Response response) {
            SignupResponse resp = new SignupResponse();
            resp.setMsg(msg);
            OttoBusSingleton.getInstance().post(resp);
        }

现在在SignupActivity上我有一个通过@Subscribe处理Otto的方法:

@Subscribe
public void onSignUpSuccess(SignupResponse event) {
    loading.dismiss();

    if(!BuildConfig.DEBUG_MODE) {
        Log.i(TAG, "!BuildConfig.DEBUG_MODE : " + AnswersAnalytics.SIGN_UP_PATIENT);
        Answers.getInstance().logCustom(new CustomEvent(AnswersAnalytics.SIGN_UP));
    }

    Toast.makeText(this,
            event.getMsg(),
            Toast.LENGTH_LONG).show();
    this.finish();
}

从这里开始,我试图让Otto回调处理SignupActivity的成功,并且在放置断点时永远不会被击中。

我确保进口是正确的,我似乎无法指出可能的解决方案。

1 个答案:

答案 0 :(得分:1)

为了接收事件,类实例需要注册总线

您需要在活动中添加以下类似的代码(from the sample):

...
@Override 
protected void onResume() {
super.onResume();

    // Register ourselves so that we can provide the initial value.
    BusProvider.getInstance().register(this);
}

@Override 
protected void onPause() {
  super.onPause();

  // Always unregister when an object no longer should be on the bus.
  BusProvider.getInstance().unregister(this);
}
...

请注意,您需要尝试在onCreate()注册总线并在onDestroy()取消注册。这是因为当活动处于非活动状态时,将调用onPause()。所以你会不小心取消注册公共汽车。