Articles of rx android

RxAndroid在相机更改时去抖谷歌地图

我有一个应用程序,它使用谷歌地图和听相机更改。 我的问题是,在每次摄像机更换时,我都要请求我的后端。 我想要做的只是通过使用RxAndroid / Java去抖动来限制请求的数量。 我的代码如下所示: Observable.create(new Observable.OnSubscribe() { @Override public void call(Subscriber subscriber) { if (!subscriber.isUnsubscribed()) { map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { subscriber.onNext(cameraPosition); } }); } } }).subscribeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread()) .onErrorResumeNext(Observable.empty()) .debounce(1, TimeUnit.SECONDS) .subscribe(cameraPosition -> { final LatLngBounds item = map.getProjection().getVisibleRegion().latLngBounds; homeActionBarActivity.getNMB().getRide().list( item.southwest.latitude, item.southwest.longitude, item.northeast.latitude, item.northeast.longitude) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .onErrorResumeNext(Observable.<List>empty()) .subscribe(new Action1<List>() […]

java.lang.NoClassDefFoundError:io.reactivex.Observable

当我在带有API 21的手机上的改装API中使用Observable时出现此错误: java.lang.NoClassDefFoundError: io.reactivex.Observable 但是在使用API​​ 19的电话或使用API​​ 23的模拟器上它可以工作。 这是我的API接口: import io.reactivex.Observable; import retrofit2.Response; import retrofit2.http.Body; import retrofit2.http.POST; public interface ApiService { /** * Created by Mohsen on 5/10/2017. * */ @POST(“/cp/api/”) Observable<Response> Get_BuyBox_Count(@Body Object request); } 这是我的改造设置: @Provides @Application_Scope @Store_Retrofit_Qualifier public Retrofit Store_retrofit(OkHttpClient client) { return new Retrofit.Builder() .baseUrl(Urls.Sotre_Base_Url) .client(client) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(JSONConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); } 我的依赖: […]

在RxJava 2中正确使用Observable.create()(最佳实践)

我目前正在构建一个利用RxJava 2和Firebase的小型社交媒体风格的应用程序。 我正在使用MVP样式架构,并且我使用名为AuthSource的接口抽象出了我的AuthService。 为简单起见,我将在我的服务中使用Single方法: public class FirebaseAuthService implements AuthSource { private FirebaseAuth auth; private FirebaseAuth.AuthStateListener listener; //initialization code @Override public Maybe getUser() { return Maybe.create(new MaybeOnSubscribe() { @Override public void subscribe(final MaybeEmitter e) throws Exception { if (auth == null) { auth = FirebaseAuth.getInstance(); } if (listener != null) { auth.removeAuthStateListener(listener); } listener = new […]

使用Retrofit 2和Rx在Scheduler.Worker线程上抛出致命exception

这是我用来进行Http调用的代码。 我无法重现错误,但Bugsnag告诉我有些用户收到此错误: java.lang.IllegalStateException StrictMode.java public class ApiManager { public interface Callback { void onError(Throwable e); void onSuccess(T result); } private ApiService _apiService; public ApiManager() { Retrofit retrofit = new Retrofit.Builder() .baseUrl(BuildConfig.BASE_URL) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .client(ew OkHttpClient()) .build(); _apiService = retrofit.create(ApiService.class); } private void execute(Observable observable, final Callback callback) { observable.subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber() { @Override public […]

我如何使用RxJava运行此语句?

Rx的做事方式对于没有人来说可能非常复杂,并且有很多原因……但我觉得有很简单的方法可以用RX做简单的事情…… 我如何在后台线程上简单地执行此语句并在ui线程上接收响应? 该对象的所有函数都需要在后台线程上运行。 获取,放置,清除和删除。 String city = Paper.get(“city”);

Android应用程序中的RxJava和MVP

我正在尝试使用MVP架构在Android应用程序中实现一个屏幕,并在View端使用RxJava和RxBinding。 基本上我有2个Spinners,1个TextEdit和一个默认禁用的按钮。 我想在Spinners选择了项目且文本字段不为空时启用按钮。 这是代码: Observable.combineLatest( RxAdapterView.itemSelections(mFirstSpinner), RxAdapterView.itemSelections(mSecondSpinner), RxTextView.textChanges(mEditText), new Func3() { @Override public Boolean call(Integer first, Integer second, CharSequence value) { return !TextUtils.isEmpty(value); } }).subscribe(new Action1() { @Override public void call(Boolean enable) { mButton.setEnabled(enable); } }); 现在的问题是如何将其整合到MVP模式中。 理想情况下,启用按钮的“业务逻辑”应该在演示者中。 实现这一目标的最佳方法是什么? 我想以某种方式将原始观察者传递给演示者(侧面问题是如何?),演示者将组合这些观察者,并且它将具有启用按钮的逻辑。 最后,它只会调用View来修改按钮状态。 还有更好的选择吗? 在View端有没有RxJava MVP的好例子?

如何改进kotlin lambda语法?

我正在尝试在android项目中使用kotlin M12,在工作期间我得到了这段代码订阅({onSuccess(it)},{onFailure(it)}) AppObservable.bindActivity(this, api.get(id)).subscribe({onSuccess(it)}, {onFailure(it)}) fun onSuccess(str: String) {} fun onFailure(tr: Throwable) {} 这不是那么糟糕,但我认为它会/应该更好。 我怎样才能改进它?

RxJava如何订阅Observable的Subject

文档说,Subject是Observer并且可以订阅Observables,但是我找不到在代码中执行它的方法。 提前致谢!

RxJava:如果发生配置更改,如何恢复可观察的工作?

我使用RxJava和RxAndroid 。 如果发生配置更改(活动轮换,语言区域设置更改等),如何恢复可观察的工作? 我不仅需要恢复可观察的工作,还需要保存已发出的项目,当订阅者取消订阅并在订阅后立即发出所有已保存的项目。 我读了很多文章,但我找不到问题的答案。 我find了一些例子,但没有一个没有解决问题: https://github.com/alapshin/rxweather https://github.com/kaushikgopal/RxJava-Android-Samples https://github.com/tehmou/rx-android-architecture https://github.com/richardradics/RxAndroidBootstrap

RxJava事件总线

使用第一个版本的RxJava和RxAndroid我有以下class作为EventBus : public class RxBus { private static RxBus instance; private PublishSubject subject = PublishSubject.create(); public static RxBus instanceOf() { if (instance == null) { instance = new RxBus(); } return instance; } public void setMessage(Object object) { subject.onNext(object); } public Observable getEvents() { return subject; } } 通过instanceOf在任何类中获取实例我使用setMessage方法发出消息并使用以下代码来获取发出的消息: bus.getEvents().subscribe(new Action1() { @Override public void […]