使用 Otto.Bus Post 并且 @subscribe 没有被调用
Using Otto.Bus Post and @subscribe is not being called
我正在尝试让 @Subscribe
从 AsyncTask 回调到 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()
。所以你会不小心取消注册总线。
我正在尝试让 @Subscribe
从 AsyncTask 回调到 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()
。所以你会不小心取消注册总线。