Kotlin版本的retrofit+rxjava
简介
重磅来袭,关于什么是retrofit+rxjava,是做什么的,有什么优势,还有应该怎么学习,这里我就不多说,不懂的你们先去搜索有关资料,这里只介绍怎么使用和封装
废话不多说,来点你们最想要的代码:
代码
1、data数据类
data class TokenData(
val access_token: String,
val token_type: String,
val refresh_token: String,
val expires_in: String,
val scope: String
)
2、retrofit工具类
class RetrofitUtil {
companion object {
const val TAG="RetrofitUtil"
/**
* 创建Retrofit
*/
fun create(url: String): Retrofit {
//显示日志级别
val level: HttpLoggingInterceptor.Level = HttpLoggingInterceptor.Level.BODY
//新建log拦截器
val loggingInterceptor: HttpLoggingInterceptor = HttpLoggingInterceptor(HttpLoggingInterceptor.Logger { message ->
Log.e(TAG,"OkHttp:$message")
})
loggingInterceptor.level = level
//okHttpClientBuilder
val okHttpClientBuilder = OkHttpClient.Builder()
okHttpClientBuilder.connectTimeout(60, TimeUnit.SECONDS)
okHttpClientBuilder.readTimeout(10, TimeUnit.SECONDS)
//OkHttp进行添加拦截器loggingInterceptor
okHttpClientBuilder.addInterceptor(loggingInterceptor)
return Retrofit.Builder()
.baseUrl(url)
.client(okHttpClientBuilder.build())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
/**
* 获取ServiceApi
*/
fun <T> getService(url: String, service: Class<T>): T {
return create(url).create(service)
}
val retrofitService: RetrofitService = RetrofitUtil.getService(Constants.REQUEST_BASE_URL, RetrofitService::class.java)
}
}
3、api接口
interface RetrofitService {
@FormUrlEncoded //post的请求必须的
@Headers( "Content-Type:application/x-www-form-urlencoded; charset=UTF-8","Authorization:Basic YXBwOmZzbGg4ODQ4") //这里是请求头
@POST("authentication/form")
fun getToken(
@Field("grant_type") grant_type: String,
@Field("username") username: String,
@Field("password") password: String,
@Field("scope") scope: String
): Observable<TokenData>
}
4、最后在activity里面调用
val disposable1 = RetrofitUtil
.getService(Constants.TOKEN_BASE_URL, RetrofitService::class.java)
.getToken("password", "zhangqiang","123456","app")//2020-3-18日期
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
Log.i(TAG, "==json结果为:"+result.toString())
}, { error ->
Log.e(TAG, "==错误:"+error.message.toString())
})
结束!!谢谢观赏