Android --- Kotlin学习之路:Okhttp 同步异步网络请求

package com.example.kotlindemo

import android.util.Log
import okhttp3.Call
import okhttp3.Callback
import okhttp3.FormBody
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import java.io.IOException
import java.util.concurrent.TimeUnit

object OKHttp {
    private val BASE_URL = "https://jsonplaceholder.typicode.com"
    val client: OkHttpClient = OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .readTimeout(10, TimeUnit.SECONDS)
        .writeTimeout(10, TimeUnit.SECONDS)
        .build()

    // 同步get请求,需要在子线程中执行,否则会阻塞主线程
    fun get() {
        // okhttp 网络请求
        Thread(Runnable {
            // 构建请求体
            val request: Request = Request.Builder()
                .url("$BASE_URL/posts/1")
                .build()
            // 构建请求对象
            val call: Call = client.newCall(request)
            // 发起同步请求
            val response = call.execute()
            // 获取返回值
            val body = response.body?.string()
            println(body)
        }).start()
    }

    // 异步get请求
    fun getAnsyc() {
        // 构建请求体
        val request: Request = Request.Builder()
            .url("$BASE_URL/posts/1")
            .build()
        // 构建请求对象
        val call: Call = client.newCall(request)
        // 发起同步请求
        val response = call.enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                Log.e("okhttp", "get onFailure : ${e.message}")
            }

            override fun onResponse(call: Call, response: Response) {
                if (response.isSuccessful) {
                    val body = response.body?.string()
                    Log.i("okhttp", "get success :$body")
                }
            }
        })
    }

    // post 的异步请求
    fun getPost() {
        // 构建RequestBody
        val body: FormBody = FormBody.Builder()
            .add("userId", "1")
            .add("id", "4")
            .build()
        // 构建请求体
        val request: Request = Request.Builder()
            .url("$BASE_URL/posts")
            .post(body)
            .build()
        // 构建请求对象
        val call: Call = client.newCall(request)
        // 发起同步请求
        call.enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                Log.e("okhttp", "post onFailure : ${e.message}")
            }

            override fun onResponse(call: Call, response: Response) {
                if (response.isSuccessful) {
                    val body = response.body?.string()
                    Log.i("okhttp", "post success : ${body}")
                }
            }
        })
    }
}

相关推荐

  1. Android --- Kotlin学习Okhttp 同步异步网络请求

    2024-07-11 17:18:02       21 阅读
  2. Android --- Kotlin学习:基础语法学习笔记

    2024-07-11 17:18:02       29 阅读
  3. okhttp网络请求工具

    2024-07-11 17:18:02       53 阅读
  4. android快速网络请求android-networking

    2024-07-11 17:18:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 17:18:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 17:18:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 17:18:02       62 阅读
  4. Python语言-面向对象

    2024-07-11 17:18:02       72 阅读

热门阅读

  1. tomcat

    tomcat

    2024-07-11 17:18:02      20 阅读
  2. 探索 GraphRAG:图结构与生成式模型的融合

    2024-07-11 17:18:02       25 阅读
  3. 全国青少年信息素养大赛:排序专项:奇偶排序

    2024-07-11 17:18:02       19 阅读
  4. 主题乐园用户增长分析专项报告

    2024-07-11 17:18:02       25 阅读
  5. 使用分布式锁解决淘客返利系统中的并发问题

    2024-07-11 17:18:02       25 阅读
  6. 数据分析主流的数据分析方法与框架使用

    2024-07-11 17:18:02       21 阅读
  7. 如何修改 grafana 密码,grafana忘了怎么办

    2024-07-11 17:18:02       23 阅读
  8. C语言旋转动画

    2024-07-11 17:18:02       22 阅读
  9. C++ 多态和虚函数

    2024-07-11 17:18:02       27 阅读
  10. Centos搭建FTP

    2024-07-11 17:18:02       23 阅读
  11. Vue在使用el-image时显示加载失败问题

    2024-07-11 17:18:02       21 阅读