Kotlin版本的retrofit+rxjava

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())
                })

结束!!谢谢观赏

发布了26 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wy313622821/article/details/105080582
今日推荐