与RxKotlin获取NetworkOnMainThreadException

我试图使用RxKotlin做网络请求,但不断得到一个NetworkOnMainThreadException我在主线程订阅,所以我不知道为什么它没有把它从UI线程。

这里是我订阅Observable的地方

 weatherInteractor.getWeather(lat, lng) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( {response -> try { val jsonData = response.body().string() val currentWeather = getCurrentWeatherData(jsonData) view!!.displayCurrentWeather(currentWeather) } catch (e: JSONException) { Log.d("Present JSON Exception", e.message) } catch (e: IOException) { Log.d("Present IO Exception", e.message) } }, { error -> error.printStackTrace() } ) } 

这里是我创建我的Observable的地方

 fun getWeather(lat: Double, lng: Double): Observable<Response> { val URL = "" val client = OkHttpClient() val request = Request.Builder() .url(URL) .build() return Observable.create { em -> try { val response = client.newCall(request).execute() em.onNext(response) em.onComplete() } catch (err: IOException) { err.printStackTrace() em.onError(err) } } } 

One Solution collect form web for “与RxKotlin获取NetworkOnMainThreadException”

看来你混淆了subscribeOnobserveOn方法。

subscribeOn指定调度程序observable将被创建并将在其上运行。 (你指定一次,位置无关紧要)。

observeOn更改调度程序的每个行动后键入它 。 您可以多次使用它,并且每组操作都将在指定的调度程序上执行。

这里是一个例子:

 Observable .just("test") .subscribeOn(Schedulers.io()) .map(s -> { //this and all Observable code is executed on Schedulers.io() return s; }) .observeOn(Schedulers.computation()) .map(s -> { // executed on Schedulers.computation() return s; }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(s -> { // executed on Android main thread }, throwable -> { }); 
  • Kotlin库'rxkotlin-0.21.0.jar'具有不受支持的格式。 请更新库或插件
  • 如何在kotlin编程语言中使用如下所述的循环?
  • RxKotlin flattenAsObservable():类型与方法引用不匹配
  • RxKotlin(RxJava2)timeout()不会抛出TimeoutException
  • 如何在RxJava2中默默跳过异常?
  • RxKotlin(RxJava2)timeout()不会抛出TimeoutException
  • 如何从generic observable订阅PublishRelay?
  • 在Kotlin函数类型中表示“超级”泛型?
  • 对于用作表达式的Kotlin函数,有没有简洁的方法来操作并返回一个值?
  • RxJava2如果没有元素,可能返回空Observable
  • 用RxJava重复对状态的操作
  • Kotlin language will be the best programming language for Android.