欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 一 框架配置

程序员文章站 2022-03-07 16:41:25
我们在写项目的时候必不可少的会用到网络请求服务器,现Retrofit2+rxjava2+Mvp的框架组合已经成为了主流网络请求框架,我使用这个框架两年多了 以下分享下开发心得和使用方法@TOC添加依赖包一级目录二级目录三级目录添加依赖包 implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'//使用java的朋友可以更换java的依赖包 implementation 'io.reactivex.rxjava2:rxandroid:2.1...

我们在写项目的时候必不可少的会用到网络请求服务器,现Retrofit2+rxjava2+Mvp的框架组合已经成为了主流网络请求框架,我使用这个框架两年多了 以下分享下开发心得和使用方法

Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 二 请求数据

Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 三 文件上传(支持多文件上传)

Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 四 下载文件

1.添加依赖包
2.自定义工具类
3.编写公共API接口地址
4.创建接收实体
5.回调接口

第一步 添加依赖包:

 	implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'//使用java的朋友可以更换java的依赖包
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
 	implementation 'com.squareup.retrofit2:retrofit:2.8.1'
    implementation 'com.squareup.retrofit2:converter-gson:2.8.1'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.8.1'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'

第二步 创建我们自己的工具类:

class AppInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {
        val original = chain.request()

        if (Api.HOST.contains(original.url().host())) {
            val builder = original.url().newBuilder()
            builder.addQueryParameter("id", 0)
            val request = original.newBuilder()
                .method(original.method(), original.body())
                .url(builder.build())
                .build()

            return chain.proceed(request)
        }
        return chain.proceed(chain.request())
    }
}
object RetrofitHelper {

    private var okHttpClient: OkHttpClient? = null
    private var builder: Retrofit.Builder? = null

    private var api: Api? = null

    private fun initOkHttp() {
        if (null == okHttpClient) {
            val builder = OkHttpClient.Builder()
            builder.addInterceptor(AppInterceptor())
            val loggingInterceptor=HttpLoggingInterceptor(HttpLoggingInterceptor.Logger { message ->
                Log.d("123", "OkHttp====Message:$message")
            })
            loggingInterceptor.level=HttpLoggingInterceptor.Level.BODY
            builder.addInterceptor(loggingInterceptor)


            //设置超时
            builder.connectTimeout(10, TimeUnit.SECONDS)
            builder.readTimeout(20, TimeUnit.SECONDS)
            builder.writeTimeout(20, TimeUnit.SECONDS)
            //错误重连
            builder.retryOnConnectionFailure(true)
            okHttpClient = builder.build()
        }
    }

    private fun getBuilder(): Retrofit.Builder {
        initOkHttp()
        if (null == builder) {
            builder = Retrofit.Builder()
                .client(okHttpClient!!)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        }
        return builder!!
    }

    fun getApi(): Api {

        if (null == api) {
            api = getBuilder()
                .baseUrl(Api.HOST).build()
                .create(Api::class.java)
        }
        return api!!
    }
    }

第三步 设置我们常用的访问接口地址

interface Api {
    companion object {
         const val HOST = "http://baidu.com/project//Url IP地址
    }

    //登录
    @POST("device/login")
    fun login(
        @Query("user") user: String
        , @Query("password") password: String
    ): Observable<ResultEntity>

第四步 接收返回实体类 返回实体根据返回json定义

public class ResultEntity implements Serializable {
    public int code;
    public String msg;
    public Data data;

    public static class Data {

        public User user;
      
    }
}

第五步 添加回调接口异常方法

interface BaseView {

    fun showError(msg: String)

}

当然最后别忘了在manifest文件里添加网络权限
<uses-permission android:name="android.permission.INTERNET" />

本文地址:https://blog.csdn.net/qq_28643195/article/details/107541730

相关标签: 三方框架