OkHttp简单使用(Kotlin)

目录

1.配置gradle

2.异步GET请求

3.异步POST请求

4.异步上传文件 

5.异步下载文件 

6.异步上传Multipart文件

7.设置超时时间和缓存


1.配置gradle

    implementation("com.squareup.okhttp3:okhttp:4.9.1")

2.异步GET请求

    private fun asyncGet() {
        val url = ""
        //创建request请求对象
        val request = Request.Builder()
            .url(url)
            //.method()方法与.get()方法选取1种即可
            .method("GET", null)
            .build()

        //创建call并调用enqueue()方法实现网络请求
        OkHttpClient().newCall(request)
            .enqueue(object : Callback {
                override fun onFailure(call: Call, e: IOException) {
                }

                override fun onResponse(call: Call, response: Response) {
                }
            })
    }

3.异步POST请求

    private fun asyncPost() {
        val url = ""
        //添加post请求参数
        val requestBody = FormBody.Builder()
            .add("userName", "name")
            .add("passWord", "pass")
            .build()

        //创建request请求对象
        val request = Request.Builder()
            .url(url)
            .post(requestBody)
            .build()

        //创建call并调用enqueue()方法实现网络请求
        OkHttpClient().newCall(request)
            .enqueue(object : Callback {
                override fun onFailure(call: Call, e: IOException) {
                }

                override fun onResponse(call: Call, response: Response) {
                }
            })
    }

4.异步上传文件 

    private fun asyncUploadFile() {
        val url = ""
        //创建file
        val filePath = Environment.getExternalStorageDirectory().absolutePath
        val file = File(filePath, "test.txt")

        //创建request请求对象
        val request = Request.Builder()
            .url(url)
            .post(file.asRequestBody("text/txt; charset=utf-8".toMediaType()))
            .build()

        //创建call并调用enqueue()方法实现网络请求
        OkHttpClient().newCall(request)
            .enqueue(object : Callback {
                override fun onFailure(call: Call, e: IOException) {
                }

                override fun onResponse(call: Call, response: Response) {
                }
            })
    }

5.异步下载文件 

    private fun asyncDownloadFile() {
        val url = ""
        //创建request请求对象
        val request = Request.Builder()
            .url(url)
            .build()

        //创建call并调用enqueue()方法实现网络请求
        OkHttpClient().newCall(request)
            .enqueue(object : Callback {
                override fun onFailure(call: Call, e: IOException) {
                }

                override fun onResponse(call: Call, response: Response) {
                    //响应成功后,从response获取输入流,写入到文件中
                    val inputStream=response.body!!.byteStream()
                    val filePath=Environment.getExternalStorageDirectory().absolutePath
                    val file=File(filePath,"test.txt")
                    val fileOutputStream=FileOutputStream(file)
                    val buffer=ByteArray(2048)
                    do {
                        val len=inputStream.read(buffer)
                        fileOutputStream.write(buffer,0,len)
                    }while (len!=-1)
                    fileOutputStream.flush()
                }
            })
    }

6.异步上传Multipart文件

    private fun asyncUploadMultipart() {
        val url = ""
        //创建MultipartBody
        val requestBody=MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("title","img")
            .addFormDataPart("image","test.png",RequestBody.create("image/png".toMediaType(),File("/sdcard/test.png")))
            .build()

        //创建request请求对象
        val request = Request.Builder()
            .url(url)
            .post(requestBody)
            .build()

        //创建call并调用enqueue()方法实现网络请求
        OkHttpClient().newCall(request)
            .enqueue(object : Callback {
                override fun onFailure(call: Call, e: IOException) {
                }

                override fun onResponse(call: Call, response: Response) {
                }
            })
        
    }

7.设置超时时间和缓存

    private fun setTimeoutAndCache() {
        val cacheDir=externalCacheDir
        val cacheSize=10*1024*1024L
        val okHttpClientBuilder=OkHttpClient.Builder()
            .connectTimeout(20,TimeUnit.SECONDS)
            .readTimeout(20,TimeUnit.SECONDS)
            .writeTimeout(20,TimeUnit.SECONDS)
            .cache(Cache(File(cacheDir,"cache.txt"),cacheSize))
        val okHttpClient=okHttpClientBuilder.build()
    }

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值