大佬教程收集整理的这篇文章主要介绍了android – 基于Observable的API和取消订阅问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
public class LOCATIOnObservable implements GooglePlayservicesClient.ConnectionCallBACks,GooglePlayservicesClient.onConnectionFailedListener,LOCATIOnListener { private LOCATIOnClient LOCATIOnClient; private final PublishSubject<LOCATIOn> latestLOCATIOn = PublishSubject.create(); public final Observable<LOCATIOn> LOCATIOnObservable = Observable.defer(() -> { if(!LOCATIOnClient.isConnected() && !LOCATIOnClient.isConnecTing()) { LOCATIOnClient.connect(); } return latestLOCATIOn.asObservable().scan((prev,curr) -> { if (Math.abs(prev.getLatitude() - curr.getLatitude()) > 0.000001 || Math.abs(prev.getLongitude() - curr.getLongitude()) > 0.000001) return curr; else return prev; }).disTinctUntilChanged();}); public LOCATIOnObservable(Context context) { LOCATIOnClient = new LOCATIOnClient(context,this,this); } @Override public void onConnected(Bundle bundlE) { latestLOCATIOn.onNext(LOCATIOnClient.getLastLOCATIOn()); } @Override public void onDisconnected() { latestLOCATIOn.onCompleted(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { latestLOCATIOn.onError(new Exception(connectionResult.toString())); } @Override public void onLOCATIOnChanged(LOCATIOn LOCATIOn) { latestLOCATIOn.onNext(LOCATIOn); } }
如您所见,我在第一个客户端订阅时使用Observable #defer初始化位置回调.我不知道这是不是一个好方法,但这是我现在提出的最好的方法.我仍然缺少的是当我的班级的最后一个客户端从我的observable取消订阅时如何停止位置更新.或者也许它在Rx中是非惯用的,因为它不明显?
private LOCATIOnClient LOCATIOnClient; private final Observable<Integer> LOCATIOnObservable = Observable .create(new OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { LOCATIOnClient.connect(); subscriber.add(Subscriptions.create(new Action0() { @Override public void call() { if (LOCATIOnClient.isConnected() || LOCATIOnClient.isConnecTing()) { LOCATIOnClient.disconnect(); } } })); } }).multicast(PublishSubject.<Integer> create()).refCount();
以上是大佬教程为你收集整理的android – 基于Observable的API和取消订阅问题全部内容,希望文章能够帮你解决android – 基于Observable的API和取消订阅问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。