与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) } } }
看来你混淆了subscribeOn
和observeOn
方法。
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数据类获取Firestore文档的文档ID
- Android DataBinding:Kotlin中的@BindingAdapter不识别lambda表达式
- Kotlinx不能解决符号“合成”
- trim字符串函数中的“it <=”'“是什么意思
- 复制Googlemap上的APK protobuf.meta文件复制商业用途
- Anko插件无法在Androidstudio版本> 2.1中运行
- 由Kotlin方法导致的Android 4.x VerifyError
- 在Android Studio中将Java文件传输到Kotlin中
- Gradle同步失败:无法GET'https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.1.3-2/kotlin-gradle-plugin-1.1.3-2.pom'