Kotlin之网络请求的封装(Rxjava+Retrofit)

好久不见,甚是想念

在此之前我们先了解一哈 rxjava  retrofit

今天主要带来的表演是网络请求,在这里简单做一个记录

话不多说上代码

/*
*
* 网络请求
* */
class RetrofitUtil private constructor() {
    private val CONNECT_TIMEOUT = 60L
    private val READ_TIMEOUT = 100L
    private val WRITE_TIMEOUT = 60L

    companion object {
        val instance: RetrofitUtil by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            RetrofitUtil()
        }
    }

    /**
     * by lazy 懒加载(延迟加载)
     */
    private val mRetrofit by lazy { myRetrofit() }
    private fun myRetrofit(): Retrofit {
        return Retrofit.Builder()
            //此处写接口地址
            .baseUrl(AppConst.BASE_URL)
            // 设置OkHttpclient
            .client(configOkHttpClient())
            // RxJava3
            .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
            // 字符串
            .addConverterFactory(ScalarsConverterFactory.create())
            // Gson
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }

    //单张图片上传
    fun uploadSinglePhoto(path: String): MultipartBody.Part? {

        var parts:MultipartBody.Part?=null
        val file = File(path)
        if (file.exists()) {
            parts= MultipartBody.Part.createFormData(
                "files",
                file.name,
                RequestBody.create(MediaType.parse("image/*"), file)
            )
        }
        return parts
    }

    //多图片上传
    fun uploadManyPhoto(list: List<String>): Array<MultipartBody.Part?>? {
        if (list == null || list.isEmpty()) {
            return null
        }
        val parts = arrayOfNulls<MultipartBody.Part>(list.size)
        for (i in list.indices) {
            val file = File(list[i])
            if (file.exists()) {
                parts[i] = MultipartBody.Part.createFormData(
                    "file",
                    file.name,
                    RequestBody.create(MediaType.parse("image/*"), file)
                )
            }
        }
        return parts
    }

    //拦截器
    private fun configOkHttpClient(): OkHttpClient? {
        val builder = OkHttpClient.Builder()
        if (BuildConfig.DEBUG) {
            //log拦截器
            builder.addInterceptor(loggingInterceptor)
        }
        builder.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
        builder.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
        builder.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
        return builder.build()
    }

    /**
     * 日志interceptor
     */
    private val loggingInterceptor: Interceptor =
        HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)

    fun <T> create(service: Class<T>?): T {
        return mRetrofit.create(service)
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值