使用Kotlin配合RxJava网络请求

使用 Kotlin 配合 RxJava 进行网络请求

1.首先需要配置Kotlin在项目中

  • Android Studio 3.0是自带的,可以在创建项目的时候勾选include kotlin support
  • Android Studio 2.0+是需要自己配置的,首先需要安装Kotlin插件,然后在下图这里配置一下,Configure Kotlin in Project

如果在配置了Kotlin,然后gradle 构建时下载慢,可以看看这里 解决Android Studio配置完Kotlin下载慢的问题

2.引入第3方库

我这里使用的是 OkHttp3,RxJava2,RxAndroid

引入如下(在我使用时,这是最新的版本):

  • implementation ‘com.squareup.okhttp3:okhttp:3.8.1’
  • implementation ‘io.reactivex.rxjava2:rxjava:2.1.2’
  • implementation ‘io.reactivex.rxjava2:rxandroid:2.0.1’
  • implementation ‘com.google.code.gson:gson:2.8.1’
  • implementation ‘com.github.bumptech.glide:glide:4.0.0’

3.正式开始写代码

在MainActivity中写入如下代码

    //使用RxJava处理
    Observable.create(ObservableOnSubscribe<String> {
        e ->

        //使用okhttp3访问网络
        val builder = Request.Builder()
        val request = builder.url(NEWS_URL).get().build()
        val response = client.newCall(request).execute()
        val responseBody = response.body()
        val result = responseBody?.string()
        //这里的.string()只能用一次  如果下面那一句不注释的话就会报错
        //val result2 = responseBody?.string()

        Log.e(TAG, result)

        //这里其实形参是String类型,然而实参是String?类型,如果直接传result会报错,在后面加!!即可解决
        //发射(这里是被观察者,被观察者发射事件)
        e.onNext(result!!)

        //上面那句代码可以这样写
        //e.onNext(result as String)
    }).subscribeOn(Schedulers.io())  //io线程  被观察者
            .observeOn(AndroidSchedulers.mainThread())  //主线程 观察者
            .subscribe({

                //这里接收刚刚被观察者发射的事件
                //这个response就是io线程发射过来的result
                response ->
                Log.e(TAG, response)
            })

简简单单的总结

看似代码极少的demo,可是我却遇到了很多的挫折,,搞了好久好久才写好,主要是遇到错误的话,这种东西网上不好找解决方案….

posted @ 2017-08-04 09:23  潇风寒月  阅读(39)  评论(0)    收藏  举报