android – 配置RxJava以将数据发送到GCMListenerService的活动
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android – 配置RxJava以将数据发送到GCMListenerService的活动,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2941字,纯文字阅读大概需要5分钟。
内容图文
![android – 配置RxJava以将数据发送到GCMListenerService的活动](/upload/InfoBanner/zyjiaocheng/810/a935da1e2ac24303bd27407143715124.jpg)
我正在尝试从我的GCMServiceListener向我的Activity发送更新,所以,我正在使用RxJava / RxAndroid并创建了一个用于处理发送和观察者的BusClass
public class ClientBus {
//private final PublishSubject<Object> _bus = PublishSubject.create();
// If multiple threads are going to emit events to this
// then it must be made thread-safe like this instead
private final Subject<Object, Object> _bus = new SerializedSubject<>(PublishSubject.create());
public void send(Object o) {
_bus.onNext(o);
}
public Observable<Object> toObserverable() {
return _bus;
}
public boolean hasObservers() {
return _bus.hasObservers();
}
}
在我的应用程序类中,我这样做是为了初始化BusClass
private ClientBus clientBus;
public ClientBus getRxBusSingleton() {
if (clientBus == null) {
clientBus = new ClientBus();
}
return clientBus;
}
在我想要接收消息的活动中,我注册了一个CompositeSubscription并从Application Class获取对ClientBus类的引用
clientBus =((MyApplication)getApplicationContext()).getRxBusSingleton();
@Override
protected void onStart() {
super.onStart();
initSubscriptions();
}
@Override
protected void onStop() {
super.onStop();
_subscriptions.unsubscribe();
}
void initSubscriptions() {
_subscriptions = new CompositeSubscription();
_subscriptions.add(clientBus.toObserverable().subscribe(new Action1<Object>() {
@Override
public void call(Object event) {
Log.e("New Event", "Event Received");
if (event instanceof MyGcmListenerService.Message) {
String msg = ((MyGcmListenerService.Message) event).getMessage();
if (msg.equals("Update Available")) {
scheduleArrayList = getSchedules();
scheduleAdapter = new ScheduleAdapter(getApplicationContext(), scheduleArrayList, ScheduledUberActivity.this);
scheduledList.setAdapter(scheduleAdapter);
scheduleAdapter.notifyDataSetChanged();
} else if (msg.equals("Refresh")) {
fetchTrips();
}
}
}
}));
}
从MyGcmListenerService类开始,当我收到新通知时,我就这样做了
private void sendRefreshNotif() {
if (clientBus.hasObservers()) {<--It enters the if cause the Log prints. But, the activity doesn't get the message
Log.e("Obervers", "Observers aren't null");
clientBus.send(new Message("Refresh"));
}
}
我不明白为什么不在这里工作?我用它在活动和片段之间进行交互.我关闭了我的应用程序以检查通知是否进入,它将进入此块if(clientBus.hasObservers()){但它没有启动应用程序并测试Observer,它注意到有一个活动的Observer.有帮助吗?谢谢.
解决方法:
您似乎在CompositeSubscription和MyApplication中使用了ClientBus类的不同实例.
尝试从ClientBus类创建一个单例,它对我来说很好.
public class ClientBus {
public ClientBus(SingletonAccessor accessor) {}
private static ClientBus instance;
private static class SingletonAccessor{}
public static ClientBus getInstance() {
if (instance == null) instance = new ClientBus(new SingletonAccessor());
return instance;
}
private final Subject<Object, Object> mBus = new SerializedSubject<>(PublishSubject.create());
public void send(Object o) {
mBus.onNext(o);
}
public Observable<Object> toObserverable() {
return mBus;
}
public boolean hasObservers() {
return mBus.hasObservers();
}
}
内容总结
以上是互联网集市为您收集整理的android – 配置RxJava以将数据发送到GCMListenerService的活动全部内容,希望文章能够帮你解决android – 配置RxJava以将数据发送到GCMListenerService的活动所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。