美文网首页安卓开发app连接网络那些事Android应用开发那些事
安卓RxJava结合Retrofit发送单个或多个网络请求(串行

安卓RxJava结合Retrofit发送单个或多个网络请求(串行

作者: 蓝不蓝编程 | 来源:发表于2020-05-12 10:38 被阅读0次

    目标

    采用RxJava和Retrofit,发送单个或多个网络请求(串行),并更新UI.

    实现方案

    发送单个网络请求方案

    1. 修改app工程的build.gradle文件
    • 在android节点下添加如下信息
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    
    • 添加依赖
    implementation 'com.squareup.retrofit2:retrofit:2.7.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.7.2'
    
    implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.2'
    
    1. 定义数据类Task.kt
    data class Task(val id: Int, var name: String)
    
    1. 创建网络接口类NetworkService.kt
    interface NetworkService {
        @GET("cxyzy1/AndroidAsyncTaskDemo/raw/master/data.json")
        fun query(): Observable<Task>
    }
    
    1. 创建网络工具类NetworkUtils.kt
    fun getNetworkService(): NetworkService {
        val okHttpClient = OkHttpClient.Builder().build()
        val retrofit = Retrofit.Builder()
            .client(okHttpClient)
            .baseUrl("https://gitee.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .build()
    
        return retrofit.create(NetworkService::class.java)
    }
    
    1. activity调用
    private fun queryData() {
        val networkService = getNetworkService()
        networkService.query()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe { t -> contentTv.text = t.name }
    }
    

    发送两个网络请求方案

    1. 修改app工程的build.gradle文件,同上
    2. 定义数据类Task.kt,同上
    3. 创建网络接口类NetworkService.kt
    interface NetworkService {
        @GET("cxyzy1/AndroidAsyncTaskDemo/raw/master/data.json")
        fun query(): Observable<Task>
    
        @GET("cxyzy1/AndroidAsyncTaskDemo/raw/master/data2.json")
        fun query2():  Observable<Task>
    }
    
    1. 创建网络工具类NetworkUtils.kt,同上
    2. activity调用
    private fun queryData() {
        val networkService = getNetworkService()
        networkService.query()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .map { contentTv.text = it.name }
            .observeOn(Schedulers.io())
            .flatMap { return@flatMap networkService.query2() }
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({ contentTv2.text = it.name },
                { Log.e("MainActivity2", it.message) }, {})
    }
    

    代码说明:
    先调用query接口,然后再调用query2接口.

    完整源代码

    https://gitee.com/cxyzy1/AndroidAsyncTaskDemo/tree/master/rxjavaDemo

    相关文章

      网友评论

        本文标题:安卓RxJava结合Retrofit发送单个或多个网络请求(串行

        本文链接:https://www.haomeiwen.com/subject/eggvnhtx.html