rxjava android 错误,如何正确处理RxJava(Android)中的onError?

我在设备上收到已安装应用的列表。这是一个昂贵的操作,所以我正在使用Rx:

Observable observable = Observable.create(subscriber -> {

List result = getUserApps();

subscriber.onNext(result);

subscriber.onError(new Throwable());

subscriber.onCompleted();

});

observable

.map(s -> {

ArrayList list = new ArrayList<>();

ArrayList applist = new ArrayList<>();

for (Application p : (ArrayList) s) {

list.add(p.getAppName());

applist.add(p);

}

return applist;

})

.subscribeOn(Schedulers.newThread())

.observeOn(AndroidSchedulers.mainThread())

.doOnError(throwable -> L.e(TAG, "Throwable " + throwable.getMessage()))

.subscribe(s -> createListView(s, view));

但是,我的问题是处理错误。

通常,用户启动此屏幕,等待应用程序加载,选择最合适的内容并转到下一页。但是,当用户快速更改UI – 应用程序崩溃与NullPointer。

好的,所以我实现了这个onError。然而,它仍然不起作用,并且在上面的usecase它抛出了我:

04-15 18:12:42.530 22388-22388/pl.digitalvirgo.safemob E/AndroidRuntime﹕ FATAL EXCEPTION: main

java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add `onError` handling.

at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:52)

at android.os.Handler.handleCallback(Handler.java:730)

at android.os.Handler.dispatchMessage(Handler.java:92)

at android.os.Looper.loop(Looper.java:176)

at android.app.ActivityThread.main(ActivityThread.java:5419)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:525)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)

at dalvik.system.NativeStart.main(Native Method)

Caused by: rx.exceptions.OnErrorNotImplementedException

at rx.Observable$31.onError(Observable.java:7134)

at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:154)

at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111)

at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70)

at rx.internal.operators.NotificationLite.accept(NotificationLite.java:147)

at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:177)

at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.access$000(OperatorObserveOn.java:65)

at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:153)

at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:47)

at android.os.Handler.handleCallback(Handler.java:730)

at android.os.Handler.dispatchMessage(Handler.java:92)

at android.os.Looper.loop(Looper.java:176)

at android.app.ActivityThread.main(ActivityThread.java:5419)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:525)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)

at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.Throwable

at pl.digitalvirgo.safemob.fragments.wizard.ApplicationsFragment.lambda$getAppList$25(ApplicationsFragment.java:267)

at pl.digitalvirgo.safemob.fragments.wizard.ApplicationsFragment.access$lambda$2(ApplicationsFragment.java)

at pl.digitalvirgo.safemob.fragments.wizard.ApplicationsFragment$$Lambda$3.call(Unknown Source)

at rx.Observable$1.call(Observable.java:145)

at rx.Observable$1.call(Observable.java:137)

at rx.Observable.unsafeSubscribe(Observable.java:7304)

at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62)

at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:47)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)

at java.util.concurrent.FutureTask.run(FutureTask.java:234)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)

at java.lang.Thread.run(Thread.java:841)

我该如何妥善处理这个问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值