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
上一篇: 8、ABPZero系列教程之拼多多卖家工具 添加手机注册登录功能
下一篇: JAXB应用实例