ここで2つの問題のうちの1つを抱えているようです。次のようなエラーのいずれか:
java.lang.IllegalStateException: Event bus [Bus "default"] accessed from non-main thread Looper
または、それを「対処」できたとしても、サブスクライバーでイベントを受信することはありません。
現在、私はいくつかのソースから石畳のクラスを持っており、バスをサブクラス化しています:
public class MainThreadBus extends Bus {
private static Bus _bus;
private Handler _handler = new Handler(Looper.getMainLooper());
public MainThreadBus() {
if (_bus == null) {
_bus = new Bus();
}
}
@Override public void register(Object obj) {
_bus.register(obj);
}
@Override public void unregister(Object obj) {
_bus.unregister(obj);
}
@Override public void post(final Object event) {
if (Looper.myLooper() == Looper.getMainLooper()) {
_bus.post(event);
} else {
_handler.post(new Runnable() {
@Override public void run() {
_bus.post(event);
}
});
}
}
}
次のようなアクティビティで使用されます。
@Subscribe
public void requestProgressAvailable(RESTRequestProgress progress) {
processProgress(progress);
}
@Override
protected void onResume() {
super.onResume();
_bus = new MainThreadBus();
_bus.register(this);
}
@Override
protected void onPause() {
super.onPause();
_bus = new MainThreadBus();
_bus.unregister(this);
}
そして、次のように IntentService から公開します。
_bus = new MainThreadBus();
_bus.post(request.createRESTRequestProgress(RESTRequest.STATUS_STARTED));
そして、メッセージは受信されません。別の構成でスレッド エラーが発生したので、今のところこれを使用します。
それで、私は何が欠けているか、間違っていますか?
編集: 私のコードが思ったように動作していないことを指摘してくれた以下の Andy に感謝します。上記のコードには、そのフィードバックに基づく変更が反映されています。