Articles of rx java2

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 […]

订阅Vs订阅RxJava2(Android)?

何时调用subscribeWith方法而不是普通订阅? 什么是用例? compositeDisposable.add(get() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(this::handleResponse, this::handleError)); VS compositeDisposable.add(get() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) // .subscribe(this::handleResponse, this::handleError); .subscribeWith(new DisposableObserver() { @Override public void onNext(News value) { handleResponse(value); } @Override public void onError(Throwable e) { handleError(e); } @Override public void onComplete() { // dispose here ? why? when the whole thing will get disposed later //via compositeDisposable.dispose(); in onDestroy(); […]

Android RxJava 2 JUnit测试 – android.os.Looper中的getMainLooper没有模拟RuntimeException

我在尝试为使用observeOn(AndroidSchedulers.mainThread())的演示者运行JUnit测试时遇到RuntimeException。 由于它们是纯JUnit测试而不是Android检测测试,因此它们无法访问Android依赖项,导致我在执行测试时遇到以下错误: java.lang.ExceptionInInitializerError at io.reactivex.android.schedulers.AndroidSchedulers$1.call(AndroidSchedulers.java:35) at io.reactivex.android.schedulers.AndroidSchedulers$1.call(AndroidSchedulers.java:33) at io.reactivex.android.plugins.RxAndroidPlugins.callRequireNonNull(RxAndroidPlugins.java:70) at io.reactivex.android.plugins.RxAndroidPlugins.initMainThreadScheduler(RxAndroidPlugins.java:40) at io.reactivex.android.schedulers.AndroidSchedulers.(AndroidSchedulers.java:32) … Caused by: java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked. See http://g.co/androidstudio/not-mocked for details. at android.os.Looper.getMainLooper(Looper.java) at io.reactivex.android.schedulers.AndroidSchedulers$MainHolder.(AndroidSchedulers.java:29) … java.lang.NoClassDefFoundError: Could not initialize class io.reactivex.android.schedulers.AndroidSchedulers at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) …

RxJava 2.x:我应该使用Flowable还是Single / Completable?

我正在使用Clean Architecture开发Android应用程序,我正在将其迁移到RxJava 2.x. 我必须向soap服务发出一些网络请求,所以我在域模块中定义了api接口: public interface SiginterApi { Observable login(String user, String password); … Observable<List> getCampaigns(List campaignIds); } 我已经读过网络请求应该使用“ Flowable ”,因为它是一个“冷可观察”的背压管理。 另一方面,我知道请求的结果将是成功(带响应)或错误,所以我不知道我是否应该使用Flowable或Single甚至Observable 。 此外,我有这样的数据库访问: public interface UserRepository extends Repository { Observable saveUser(String username, String hashedPassword, boolean logged, User user); … Observable findUser(String username, String hashedPassword); } 我不知道是否应该在saveUser方法中使用Completable / saveUser / Observable在saveUser方法中使用Single / findUser / Observable […]

RxJavaPlugins错误未find类“com.google.devtools.build.android.desugar.runtime.ThrowableExtension”

升级Android Studio 3.0 Beta 1后出现以下错误。 当我降级时,错误消失了。 Studio Build:Android Studio 3.0 Beta 1 Gradle插件版本:’com.android.tools.build:grad:3.0.0-beta1’Gradle版本:.0.0-beta1 Java版本:8 OS:MacOSX java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/devtools/build/android/desugar/runtime/ThrowableExtension; at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:364) at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:113) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6121) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) Caused by: java.lang.ClassNotFoundException: Didn’t find class “com.google.devtools.build.android.desugar.runtime.ThrowableExtension” on path: DexPathList[[zip file “/data/app/sark.savvy.Debug-1/base.apk”, zip file “/data/app/sark.savvy.Debug-1/split_lib_dependencies_apk.apk”, zip […]

RxJava flatMapIterable与单

我试图整理一下我的代码, Single对于我来说是一个不错的select,因为我正在做一些只会发出一个结果的东西。 我有一个问题,因为我以前使用flatMapIterable采取我的回应(一个列表),并在每个项目上做一些事情。 我没有看到我怎么能用Single实现这个。 getListOfItems() .flatMapIterable(items -> items) .flatMap(item -> doSomethingWithItem()) .toList() 这工作得很好,如果getListOfItems返回一个Observable但如果我试着让它返回一个Single ,那么我不能做flatMapIterable ,不能看到替代,任何想法?

RxJava2表单validation

我有一个需要检查的4个可能的选项(取决于具体情况可能会less一些)。 有两个editexts,一个用于电子邮件,一个用于创build订单时的参考字段。 根据条件(在创build表单时可用),电子邮件地址和参考字段可能会也可能不会被留空。 此外,我们可能需要显示一个警告对话框,告诉用户可能无法显示参考价值(订单的接收者),他们也可能需要同意条款和条件警报对话框。 目前onConfirm检查是这样的, void onCreateOrderConfirmed(@Nullable final String receiverEmail, @Nullable final String reference, @Nullable final Boolean noRefAgreed, @Nullable final Boolean termsAndConditionsAgreed) { if (!reviewCompletionState.emailRequirementSatisfied()) { if (!isValidEmail(receiverEmail)) { view.showEmailError(); return; } reviewCompletionState = reviewCompletionState.newBuilder() .receiverEmail(receiverEmail) .emailRequirementSatisfied(true) .build(); } if (!reviewCompletionState.referenceRequirementSatisfied()) { if (isEmpty(reference)) { view.showReferenceError(); return; } reviewCompletionState = reviewCompletionState.newBuilder() .reference(reference) .referenceRequirementSatisfied(true) .build(); } […]

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

我在我的项目中使用了RxJava2,Kotlin-1.1和RxBindings。 我有简单的login屏幕,默认情况下禁用“login”button,我只想在用户名和密码edittext字段不为空时启用button。 LoginActivity.java Observable<Boolean> 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<CharSequence>? = null private var passwordObservable: Observable<CharSequence>? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) initialize() } fun initialize() { userNameObservable […]

用改造和rxjava 2.x处理空的响应

当使用rxjava 1.xi用于返回Observable<Void>以处理来自改造的空响应: @POST( "login" ) Observable<Void> getToken( @Header( "Authorization" ) String authorization, @Header( "username" ) String username, @Header( "password" ) String password ); 但是,因为rxjava 2.x不会发出任何与Void有什么好的做法来处理这些空的回应?

RxJava。 顺序执行

在我的Android应用程序中,我有一个处理用户交互的演示者,包含一种请求pipe理器,如果需要,请求pipe理器通过请求pipe理器发送用户input。 请求pipe理器本身包含服务器API,并使用此RxJava处理服务器请求。 我有一个代码,每次用户input消息并向服务器显示响应时,都会向服务器发送请求: private Observable<List<Answer>> sendRequest(String request) { MyRequest request = new MyRequest(); request.setInput(request); return Observable.fromCallable(() -> serverApi.process(request)) .doOnNext(myResponse -> { // store some data }) .map(MyResponse::getAnswers) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()); } 但是现在我需要有一个队列。 用户可能会在服务器响应之前发送新消息。 来自队列的每条消息应该按顺序处理。 即第二条消息将在我们收到第一条消息的响应之后发送,等等。 如果发生错误,则不应处理进一步的请求。 我还需要在RecyclerView中显示答案。 我不知道如何改变上面的代码来实现上面描述的处理 我看到了一些问题。 一方面,这个队列可以随时由用户更新,另一方面,任何时候服务器发送一个响应消息应该从队列中删除。 也许有一个rxjava操作符或特殊的方式,我只是错过了。 我在这里看到了类似的答案,然而,“队列”是不变的。 使用RxJava和Retrofit进行N个连续的api调用 我会非常感谢任何解决scheme或链接