是的,Kotlin 擴展函數可以用于網絡請求。擴展函數是一種在現有類上添加新功能的方式,它們不會修改原始類的代碼。在網絡請求中,你可以使用擴展函數來簡化代碼和提高可讀性。
以下是一個使用 Kotlin 擴展函數進行網絡請求的示例:
import java.io.IOException
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
fun String.toRequestBody(contentType: MediaType? = null): RequestBody {
return if (contentType != null) {
this.toRequestBody(contentType)
} else {
this.toRequestBody("application/json; charset=utf-8".toMediaType())
}
}
fun OkHttpClient.get(url: String, block: Request.Builder.() -> Unit): Response {
val request = Request.Builder().apply(block).url(url).build()
return this.newCall(request).execute()
}
fun main() {
val client = OkHttpClient()
val url = "https://api.example.com/data"
client.get(url) {
addHeader("Authorization", "Bearer your_token")
addHeader("Content-Type", "application/json")
}.use { response ->
if (response.isSuccessful) {
println(response.body?.string())
} else {
println("請求失敗,錯誤碼:${response.code}")
}
}
}
在這個示例中,我們定義了一個名為 toRequestBody 的擴展函數,它接受一個 String 類型的參數和一個可選的 MediaType 類型參數。這個擴展函數將字符串轉換為 RequestBody 類型,以便在網絡請求中使用。
我們還定義了一個名為 get 的擴展函數,它接受一個 OkHttpClient 類型的參數、一個 String 類型的 URL 參數和一個 lambda 表達式參數。這個擴展函數使用提供的 lambda 表達式構建一個 Request 對象,并使用 OkHttpClient 發送請求。
在 main 函數中,我們創建了一個 OkHttpClient 實例,并使用 get 擴展函數發送一個 GET 請求。請求成功后,我們打印響應體的內容。