我遇到了关于Greenrobot的EventBus的问题。
我正在尝试从我的同步适配器的后台服务中发布一个事件,并在片段中捕获它以更新UI。
问题是,当我尝试从同步适配器中发布事件时,在调试日志中出现以下内容:
o.lexii.muraviov.ua.simplerssreader.event.UpdateUIEvent类没有订阅者注册 org.greenrobot.eventbus.NoSubscriberEvent类没有订阅者注册
我在onResume
中注册片段并在onPause
取消注册。
@Override
public void onResume() {
super.onResume();
EventBus.getDefault().register(this);
if (mDebug) Log.d(LOG_TAG, EventBus.getDefault().isRegistered(this) + "");
}
@Override
public void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
}
在onResume中的日志语句显示片段已成功注册。
下面是onEvent方法:
@Subscribe
public void onEvent(UpdateUIEvent event) {
if (mSwipeRefreshLayout.isRefreshing())
mSwipeRefreshLayout.setRefreshing(false);
}
我尝试使用后台线程模式调用onEvent方法,但并没有帮助。
之后我尝试使用handler来发布事件,但是EventBus仍然找不到已注册的事件订阅者。
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
EventBus.getDefault().post(new UpdateUIEvent());
}
});
这是我的同步适配器的onPerform方法:
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
// Fetch data from server
} finally {
// close everything
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Log.d(LOG_TAG, "Update event");
EventBus.getDefault().post(new UpdateUIEvent());
}
});
}
}
如何使用Greenrobot的EventBus从同步适配器发送事件到片段(fragment)?