Articles of rx java2

使用RxJava从存储库中获得网络意识

我很难find一个合适的解决方案来使view / viewmodel知道网络状态,特别是使用RxJava。 我试图关注谷歌的NetworkBoundResource和Iammert的networkBoundResouce (也试过GithubBrowserSample,但我真的不明白代码或它应该如何封装。 我正在寻找如何使用RxJava2实现NetworkBoundResource,使数据自动刷新数据库。 我将展示我目前拥有的东西: 与arch.lifecycle.ViewModel的片段 public class LoginViewModel extends ViewModel { static final int SCREEN_JUST_BUTTONS = 0; static final int SCREEN_LOGIN_INPUT = 1; static final int SCREEN_PASS_INPUT = 2; // using a PublishSubject because we are not interested in the last object that was emitted // before subscribing. Like this we avoid […]

使用Kotlin在RxJava中使用花括号和普通括号之间的区别是什么

我不明白使用RxJava时花括号和Kotlin中的普通括号之间的真正区别。 例如,我有以下代码按预期工作: someMethodThatReturnsCompletable() .andThen(anotherMethodThatReturnsACompletable()) .subscribe(…) 但以下不起作用: someMethodThatReturnsCompletable() .andThen { anotherMethodThatReturnsACompletable() } .subscribe(…) 注意链的andThen()部分与花括号的区别。 我无法理解两者之间的区别是什么。 我看过一些文章,但不幸的是我仍然难以理解这种微妙的差异。

Flowable的onErrorResumeNext,networkOnMainThread出错

我有以下rxJava链: override fun combineLocationToPlace(req: Flowable): Flowable { var combinedFlowable = Flowable .combineLatest( req, getLastLocation().lastOrError().toFlowable(), BiFunction { t1, location -> Timber.w(“FIRSTINIT – Retrieved location $location”) var placeLocation = Location(t1.placeName) placeLocation.latitude = t1.latitude placeLocation.longitude = t1.longitude t1.distance = location.distanceTo(placeLocation) t1 }) return combinedFlowable .onErrorResumeNext { t: Throwable -> Timber.w(t, “FIRSTINIT – Could not retrieve location for place […]

RxJava flatMapIterable with Single

我正在尝试整理我的代码,而Single对我来说是一个不错的选择,因为我正在做一些只能发出一个结果的东西。 我遇到了一个问题,因为我之前使用flatMapIterable来获取我的响应(列表)并对每个项目执行某些操作。 我没有看到我如何用Single实现这个目标。 getListOfItems() .flatMapIterable(items -> items) .flatMap(item -> doSomethingWithItem()) .toList() 如果getListOfItems返回一个Observable但是如果我尝试让它返回一个Single ,那么这个工作正常,那么我不能做flatMapIterable并且看不到替代,任何想法?

无法使用TestSubscriber订阅RxJava 2 Observable

为什么我的编译器不允许自己使用TestSubscriber订阅Observable? 这是我的代码: TestSubscriber testSubscriber = new TestSubscriber(); Observable.just(new User()).subscribe(testSubscriber); 并且它说它无法解决采用此参数的方法subscribe 。 但是在所有RxJava测试教程中,他们使用TestSubscriber而没有这些问题。 我该怎么做来测试这样的Observable?

如何实现用户输入的定期处理?

我当前的Android应用程序允许用户远程搜索内容。 例如,向用户呈现EditText ,该EditText接受其搜索字符串并触发远程API调用,该调用返回与输入的文本匹配的结果。 更糟糕的情况是,每次调用TextWatcher ,我只需添加一个TextWatcher并触发API调用。 这可以通过在进行第一次API调用之前强制用户输入至少N个字符来搜索来改进。 “完美”解决方案具有以下特点: – 一旦用户开始输入搜索字符串 定期(每M毫秒)消耗输入的整个字符串。 每当周期到期并且当前用户输入与先前的用户输入不同时触发API调用。 [是否有可能与输入的文本长度相关的动态超时? 例如,虽然文本“短”,但API响应大小会很大,并且需要更长时间才能返回和解析; 随着搜索文本变得越来越长,API响应大小将随着“飞行”和解析时间而减少 当用户重新键入EditText字段时,重新启动Periodic消耗文本。 每当用户按下ENTER键触发“最终”API调用,并停止监视用户输入到EditText字段。 设置用户在触发API调用之前必须输入的文本的最小长度,但将此最小长度与覆盖的超时值组合,以便当用户希望搜索“短”文本字符串时。 我确信RxJava和/或RxBindings可以支持上述要求,但到目前为止我还没有实现一个可行的解决方案。 我的尝试包括 private PublishSubject publishSubject; publishSubject = PublishSubject.create(); publishSubject.filter(text -> text.length() > 2) .debounce(300, TimeUnit.MILLISECONDS) .toFlowable(BackpressureStrategy.LATEST) .subscribe(new Consumer() { @Override public void accept(final String s) throws Exception { Log.d(TAG, “accept() called with: s = [” + s + […]

改造2 + RxJava取消/取消订阅

我正在执行网络请求,我发送文件和消息。 我想有一个取消当前请求的选项。 我发现了两个类似的问题,两者都表明observable.subscribe(Observer)返回了具有方法unsubscribe() Subscription对象。 这是第一个 第二个 在我的例子中,我使用observable.subscribe(Observer) ,它是无效的。 这是我的代码: Observable observable = mModel.sendMessage(message, companion, description, multiParts); observable.subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(MessengerRaw value) { if (getView() != null) { ((MessengerActivity) getView()).resetMessegeView(); ((MessengerActivity) getView()).updateMessageList(); } } @Override public void onError(Throwable e) { getData().remove(0); if (getView() != null) { […]

RxJava 2可取消和一次性有什么区别?

我想使用RxJava 2从视图点击监听器创建一个Observable 。我从最简单的实现开始(我不在这里使用lambdas来显示此方法中的不同types): Observable viewObservable = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(@NonNull ObservableEmitter e) throws Exception { mNewWordView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View value) { if (!e.isDisposed()) { e.onNext(value); } } }); } }); 然后我想到了如果不需要进一步将onClickListener设置为null的方法。 我发现有两种类似(对我来说)名称的方法: e.setCancellable(Cancellable c); 和e.setDisposable(Disposable d); 它们之间有什么区别,我应该使用哪种?

通过改造和rxjava 2.x处理空响应

当使用rxjava 1.xi用于返回Observable来处理来自改造的空响应时: @POST( “login” ) Observable getToken( @Header( “Authorization” ) String authorization, @Header( “username” ) String username, @Header( “password” ) String password ); 但是因为rxjava 2.x不会用Void发出任何东西,所以有任何好的做法来处理那些空的响应吗?

Observable.combine在kotlin中的最新types推断

我在我的项目中使用RxJava2,Kotlin-1.1和RxBindings。 我有简单的登录界面,默认情况下禁用“登录”按钮,我想只在用户名和密码的edittext字段不为空时启用按钮。 LoginActivity.java Observable isFormEnabled = Observable.combineLatest(mUserNameObservable, mPasswordObservable, (userName, password) -> userName.length() > 0 && password.length() > 0) .distinctUntilChanged(); 我无法将上述代码从Java翻译成Kotlin: LoginActivity.kt class LoginActivity : AppCompatActivity() { val disposable = CompositeDisposable() private var userNameObservable: Observable? = null private var passwordObservable: Observable? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) initialize() } fun initialize() { userNameObservable […]