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

我们在写项目的时候必不可少的会用到网络请求服务器,现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" />

猜你喜欢

转载自blog.csdn.net/qq_28643195/article/details/107541730