Я использую BusProvider с Android для обработки сообщений обратной связи в основной поток после выполнения AsynTask. Когда задача Async завершена и она успешна, она регистрирует сообщение и возвращается в поток MAIN для отображения диалогового окна предупреждения. Когда это не удается, я хотел бы, чтобы он вернулся к тому же методу в потоке MAIN и отобразил сообщение о том, почему он не удалось. В этом случае он регистрируется, поэтому это может быть так просто, как «Это письмо уже используется».BusProvider не возвращается к @Subscribe
Это, похоже, не работает для меня, и он никогда не возвращается к основной теме.
В моей задаче асинхронным с помощью BusProvider, я отправляю назад это на провал:
@Override
public void failure(RetrofitError error) {
BusProvider.getInstance().post(new SignupTask.ErrorEvent(new String(((TypedByteArray) error.getResponse().getBody()).getBytes())));
}
Затем перешел в класс ErrorEvent:
public class ErrorEvent {
public String message;
public ErrorEvent(String message) {
this.message = ResponseParser(message);
}
public String ResponseParser(String response){
//Handle JSON parsing here of response, need message + the array stack to display to the user what is exactly wrong
return response;
}
}
Еще какую-то работу, чтобы сделать там но прежде чем разобрать информацию, которую я хотел бы просто передать ответ назад.
Ответ не равен нулю, и я проверил это при отладке. После того, как он возвращается к BusProvider.getInstance() пост (...) он никогда не возвращается в основной поток и ударил мой @Subscribe
@Subscribe:.
@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));
}
AlertDialog alertDialog = new AlertDialog.Builder(SignupActivity.this).create();
alertDialog.setTitle("Thank you");
alertDialog.setMessage(event.getMsg());
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
killSignup();
}
});
alertDialog.show();
}
Я хотел бы использовать это то же @Subscribe для обработки ошибки и отображения ее.
Любая помощь очень ценится!
Я пробовал это, и я до сих пор не добираюсь до родительского вида, чтобы удалить spinner.dismiss(). Его по основному потоку в родительской активности от AsyncTask – Keeano
Вы пытались отладить метод 'Bus'.post'? Он просто называет подписанный метод через отражение, никакой магии нет. Просто проверьте, как это происходит с помощью классов, которые уже работают в вашем проекте и сравнивают их с вашим текущим нерабочим. это не ваш класс, который не зарегистрирован (или зарегистрирован на другой шине), и вы не вызываете его из другого потока. Вы также можете проверить использование памяти во время стекирования обработчиков 'post', если ваша память идет вверх, это означает, что что-то не так, если оно находится на одном уровне lvl или очищается' GC', вы просто испортились с регистрацией. – deathangel908
Текущий метод подписки работает отлично, когда я получаю успех с сервера, просто не работает при сбое. Он даже не доходит до точки останова, которую я разместил в методе подписки. – Keeano