我正在尝试让@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的成功,并且在放置断点时永远不会被击中。
我确保进口是正确的,我似乎无法指出可能的解决方案。
答案 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()
。所以你会不小心取消注册公共汽车。