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>
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
如对本文有疑问, 点击进行留言回复!!
before社区电量是什么意思 Before社区电量获得方法
RecycleView入门详解(教你全面掌握RecycleView用法)
动态权限请求框架RxPermissions(几行代码搞定权限)
URL路径@PathVariable出现点号“.“时值遭截断问题
网友评论