OkHttp简单使用(Kotlin)

时间:2025-02-08 10:20:36

目录

1.配置gradle

2.异步GET请求

3.异步POST请求

4.异步上传文件 

5.异步下载文件 

6.异步上传Multipart文件

7.设置超时时间和缓存


1.配置gradle

    implementation(".okhttp3:okhttp:4.9.1")

2.异步GET请求

    private fun asyncGet() {
        val url = ""
        //创建request请求对象
        val request = ()
            .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 = ()
            .add("userName", "name")
            .add("passWord", "pass")
            .build()

        //创建request请求对象
        val request = ()
            .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 = ().absolutePath
        val file = File(filePath, "")

        //创建request请求对象
        val request = ()
            .url(url)
            .post(("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 = ()
            .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=!!.byteStream()
                    val filePath=().absolutePath
                    val file=File(filePath,"")
                    val fileOutputStream=FileOutputStream(file)
                    val buffer=ByteArray(2048)
                    do {
                        val len=(buffer)
                        (buffer,0,len)
                    }while (len!=-1)
                    ()
                }
            })
    }

6.异步上传Multipart文件

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

        //创建request请求对象
        val request = ()
            .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=()
            .connectTimeout(20,)
            .readTimeout(20,)
            .writeTimeout(20,)
            .cache(Cache(File(cacheDir,""),cacheSize))
        val okHttpClient=()
    }