使用 Otto.Bus Post 并且 @subscribe 没有被调用

Using Otto.Bus Post and @subscribe is not being called

我正在尝试让 @SubscribeAsyncTask 回调到 activity。我已经通读了 Otto 技术文档,也阅读了许多不同的在线文章以及此处的堆栈,其中 none 似乎帮助我解决了我的问题。

AsynTask 调用完美并记录在我的日志中,我什至可以从 post 请求中获得响应。正如我在其他问题和技术文档中看到的那样,我也在注册 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 上的成功,并且在放置断点时它永远不会命中。

我已确保导入正确,但我似乎无法找到可能的解决方案。

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

您需要将以下代码添加到您的 activity(采取 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() 中注销。这是因为当 Activity 处于非活动状态时,将调用 onPause()。所以你会不小心取消注册总线。