首页 > 解决方案 > 使用 AndroidScheduler.mainThread() 时 RxAndroid 崩溃

问题描述

我使用 RxJava 和 RxAndroid 从 api 获取数据并更新我的视图。但是在使用 RxAndroid AndroidScheduler.mainThread() 之后,应用程序崩溃并出现未知异常。

此外,我正在使用 RX 推荐的 RxJava 和 RxAndroid 3.0.0 版

例外:

2020-08-04 22:15:24.879 6831-6831/com.saswata.illeo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.saswata.illeo, PID: 6831
    java.lang.BootstrapMethodError: Exception from call site #1 bootstrap method
        at io.reactivex.rxjava3.android.schedulers.AndroidSchedulers.<clinit>(AndroidSchedulers.java:33)
        at io.reactivex.rxjava3.android.schedulers.AndroidSchedulers.mainThread(AndroidSchedulers.java:44)
        at com.saswata.illeo.view.activity.ListActivity.fetchData(ListActivity.kt:33)
        at com.saswata.illeo.view.activity.ListActivity.onCreate(ListActivity.kt:26)
        at android.app.Activity.performCreate(Activity.java:7032)
        at android.app.Activity.performCreate(Activity.java:7023)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1236)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2814)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2943)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1630)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6626)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
     Caused by: java.lang.NoClassDefFoundError: Invalid descriptor: IL.
        at io.reactivex.rxjava3.android.schedulers.AndroidSchedulers.<clinit>(AndroidSchedulers.java:33) 
        at io.reactivex.rxjava3.android.schedulers.AndroidSchedulers.mainThread(AndroidSchedulers.java:44) 
        at com.saswata.illeo.view.activity.ListActivity.fetchData(ListActivity.kt:33) 
        at com.saswata.illeo.view.activity.ListActivity.onCreate(ListActivity.kt:26) 
        at android.app.Activity.performCreate(Activity.java:7032) 
        at android.app.Activity.performCreate(Activity.java:7023) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1236) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2814) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2943) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1630) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6626) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811) 

代码:

onserverInst.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({//someWork},{//someError})

标签: androidkotlinrx-java2rx-android

解决方案


我刚刚发现我们可以通过以下方式做同样的事情:

onserverInst
    .subscribeOn(Schedulers.io())
    .subscribe({
         runOnUiThread{
             // UI work
         }
         //someWork
    },{//someError})

不使用 RxAndroid,因为我认为它现在非常没用。(至少现在)


推荐阅读