标签: rx-java2

RxJava2 observable抛出UndeliverableException

据我所知,RxJava2 values.take(1)创建了另一个Observable,它只包含原始Observable中的一个元素.哪个不能抛出异常,因为它被take(1)第二次发生的效果过滤掉了.

下面的代码片段所示

    Observable<Integer> values = Observable.create(o -> {
        o.onNext(1);
        o.onError(new Exception("Oops"));
    });

    values.take(1)
            .subscribe(
                    System.out::println,
                    e -> System.out.println("Error: " + e.getMessage()),
                    () -> System.out.println("Completed")
            );
Run Code Online (Sandbox Code Playgroud)

产量

1
Completed
io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Oops
    at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:366)
    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:83)
    at ch02.lambda$main$0(ch02.java:28)
    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
    at io.reactivex.Observable.subscribe(Observable.java:10841)
    at io.reactivex.internal.operators.observable.ObservableTake.subscribeActual(ObservableTake.java:30)
    at io.reactivex.Observable.subscribe(Observable.java:10841)
    at io.reactivex.Observable.subscribe(Observable.java:10827)
    at io.reactivex.Observable.subscribe(Observable.java:10787)
    at ch02.main(ch02.java:32)
Caused by: java.lang.Exception: Oops
    ... 8 more
Exception in thread "main" io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Oops
    at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:366)
    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:83)
    at ch02.lambda$main$0(ch02.java:28)
    at …
Run Code Online (Sandbox Code Playgroud)

java take observable rx-java2

35
推荐指数
3
解决办法
2万
查看次数

Rxandroid SubscribeOn和ObserveOn之间的区别是什么

我只是在学习Rx-java和Rxandroid2,我只是混淆了SubscribeOn和ObserveOn之间的主要区别.

java android rx-java rx-android rx-java2

34
推荐指数
4
解决办法
6510
查看次数

RxJavaPlugins错误未找到类"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 file "/data/app/sark.savvy.Debug-1/split_lib_slice_0_apk.apk",
  zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_1_apk.apk", zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_2_apk.apk",
   zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_3_apk.apk", zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_4_apk.apk", 
   zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_5_apk.apk", zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_6_apk.apk",
    zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_7_apk.apk", zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_8_apk.apk", …
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin rx-java2 android-studio-3.0

28
推荐指数
2
解决办法
4178
查看次数

我是否必须取消订阅已完成的观察?

如果一个observable完成了,我是否还必须取消订阅/处置(在RxJava2中)observable以删除Observer(防止内存泄漏),或者一旦发生onCompleteonError事件发生,这是由RxJava内部处理的吗?

对其他类型的像什么Single,Completable,Flowable等.

java rx-java rx-java2

27
推荐指数
2
解决办法
5858
查看次数

何时调用dispose并清除CompositeDisposable

我的问题可以是如何使用RxJava 2的CompositeDisposable的副本?但要求澄清一个疑问.根据接受的答案

// Using clear will clear all, but can accept new disposable
disposables.clear(); 
// Using dispose will clear all and set isDisposed = true, so it will not accept any new disposable
disposables.dispose(); 
Run Code Online (Sandbox Code Playgroud)

在我的例子中,我使用片段作为我的视图(在MVP中查看图层),在某些情况下,我将活动片段添加到backstack,实际上不会杀死Fragment但只会查看其视图.这意味着只onDestroyView调用而不是调用onDestroy.后来我可以回到后台堆叠的同一个片段,所以只有它的视图才被重新创建.我有一个CompositeDisposable作为我的成员BaseFragment持有订阅.

我的问题是,我应该叫clearCompositeDisposable每个时间onDestroyView?一旦视图恢复,它可以再次获取订阅吗?并调用disposeonDestroy时候片段本身被破坏没有必要采取一次性用品了,所以呢?

如果错了,处理的正确方法是什么.当cleardispose具有被称为?

android rx-java2

25
推荐指数
3
解决办法
1万
查看次数

如何将rxJava2的Observable转换为Completable?

我有Observable流,我想将它转换为Completable,我怎么能这样做?

java reactive-programming observable rx-java rx-java2

23
推荐指数
2
解决办法
1万
查看次数

无法解析符号InstantTaskExecutorRule

我打开示例代码BasicRxJavaSample(来自这篇文章Room + RxJava)主要的是:

@Rule
public InstantTaskExecutorRule instantTaskExecutorRule = 
    new InstantTaskExecutorRule();
Run Code Online (Sandbox Code Playgroud)

并且BasicRxJavaSample都可以.但我不能在我的测试中应用这个.这是正在发生的事情:

无法解析符号InstantTaskExecutorRule

在此输入图像描述

手动导入不起作用:

在此输入图像描述

我的自动完成就像这样 在此输入图像描述

但应该如此

在此输入图像描述

我的app build.gradle(完全gradle在这里):

// tests
testImplementation 'junit:junit:4.12'
androidTestCompile "com.android.support:support-annotations:$supportVersion"
testImplementation "android.arch.core:core-testing:$archVersion"
// Test helpers for Room
testImplementation "android.arch.persistence.room:testing:1.0.0"
// https://github.com/mockito/mockito
testImplementation 'org.mockito:mockito-core:2.13.0'
androidTestImplementation 'org.mockito:mockito-android:2.13.0'
// AndroidJUnitRunner and JUnit Rules
androidTestImplementation 'com.android.support.test:rules:1.0.1'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
// https://developer.android.com/topic/libraries/testing-support-library/packages.html
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
androidTestCompile 'com.android.support.test.espresso:espresso-idling-resource:3.0.1'
Run Code Online (Sandbox Code Playgroud)

android unit-testing junit4 rx-java2

23
推荐指数
5
解决办法
8584
查看次数

我们应该为 Rxjava3 使用哪个 rxjava3 改造适配器

我正在使用 RxJava3 和改造,但我无法获得 RxJava3 的 rxjava3 改造适配器。

android rx-java retrofit rx-java2

23
推荐指数
2
解决办法
6771
查看次数

Observable.combine在kotlin中的最新类型推断

我在我的项目中使用RxJava2,Kotlin-1.1和RxBindings.

我有一个简单的登录界面,默认情况下禁用"登录"按钮,我想只在用户名和密码的edittext字段不为空时启用该按钮.

LoginActivity.java

Observable<Boolean> isFormEnabled =
    Observable.combineLatest(mUserNameObservable, mPasswordObservable,
        (userName, password) -> userName.length() > 0 && password.length() > 0)
        .distinctUntilChanged();
Run Code Online (Sandbox Code Playgroud)

我无法将上述代码从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 = RxTextView.textChanges(username).skip(1)
        .debounce(500, TimeUnit.MILLISECONDS)
    passwordObservable = RxTextView.textChanges(password).skip(1)
        .debounce(500, TimeUnit.MILLISECONDS) 
  }

  private fun setSignInButtonEnableListener() {
    val isSignInEnabled: Observable<Boolean> = Observable.combineLatest(userNameObservable,
        passwordObservable,
        { u: CharSequence, p: CharSequence …
Run Code Online (Sandbox Code Playgroud)

android kotlin rx-binding rx-java2

22
推荐指数
2
解决办法
9064
查看次数

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

我想Observable使用RxJava 2 创建一个来自视图的单击侦听器.我从最简单的实现开始(我不在这里使用lambdas来向您展示此方法中的不同类型):

 Observable<View> viewObservable = Observable.create(new ObservableOnSubscribe<View>() {
        @Override
        public void subscribe(@NonNull ObservableEmitter<View> e) throws Exception {
            mNewWordView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View value) {
                    if (!e.isDisposed()) {
                        e.onNext(value);
                    }
                }
            });
        }
    });
Run Code Online (Sandbox Code Playgroud)

然后我想到了onClickListener如果不需要进一步设置为null 的方法.我发现有两种类似(对我来说)名称的方法:

e.setCancellable(Cancellable c);e.setDisposable(Disposable d);

它们之间有什么区别,我应该使用哪种?

java android onclicklistener rx-java2

22
推荐指数
2
解决办法
6464
查看次数