一、网络框架OKHttp get和post以及Gson的简单使用

Android 在6.0之后也将内部的HttpUrlConnection的默认实现替换成了OkHttp

1. 特点

  • 1.同时支持HTTP1.1与支持HTTP2.0
  • 2.同时支持同步与异步请求;
  • 3.同时具备HTTP与WebSocket功能;
  • 4.拥有自动维护的socket连接池,减少握手次数;
  • 5.拥有队列线程池,轻松写并发;
  • 6.拥有Interceptors(拦截器),轻松处理请求与响应额外需求(例:请求失败重试、响应内容重定向等等);

图片和部分文字转载自https://www.songyubao.com/book/primary/network/OKHttp.html

OkHttp

2.准备阶段

step1:添加网络访问权限

在AndroidManifest.xml中添加

<uses-permission android:name="android.permission.INTERNET" />

step2:添加依赖

app/build.gradledependencies中添加下面的依赖

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

// 网络请求日志打印
implementation("com.squareup.okhttp3:logging-interceptor:4.9.0")

step3:初始化

val client:OkHttpClient  = OkHttpClient.Builder()    //builder构造者设计模式
        .connectTimeout(10, TimeUnit.SECONDS) //连接超时时间
        .readTimeout(10, TimeUnit.SECONDS)    
        .writeTimeout(10, TimeUnit.SECONDS)  //写超时,也就是请求超时
        .build()

Tips:

1.object对象的方法调用不用实例化,class对象的方法调用需要实例化

object对象在APP整个生命周期只有一份

3. GET请求

Android 分为主线程子线程

主线程:APP一启动后,Android framework层会启动一个线程,主线程(UI线程)

子线程 例如 new Thread().start()

3.1同步GET请求

  • 同步GET的意思是一直等待http请求, 直到返回了响应. 在这之间会阻塞线程, 所以同步请求不能在Android的主线程中执行, 否则会报错NetworkMainThreadException.

  • 发送同步GET请求很简单:

  1. 创建OkHttpClient实例client
  2. 通过Request.Builder构建一个Request请求实例request
  3. 通过client.newCall(request)创建一个Call的实例
  4. Call的实例调用execute方法发送同步请求
  5. 请求返回的response转换为String类型返回
object FirstOKHttp{
   
    val client:OkHttpClient = OkHttpClient.Builder()  //builder构造者设计模式
        .connectTimeout(10 , TimeUnit.SECONDS) //连接超时时间
        .readTimeout(10 , TimeUnit.SECONDS)    //读取超时
        .writeTimeout(10 , TimeUnit.SECONDS)   //写超时
        .build()

    //同步请求
    fun get(url : String){
   
        //子线程  为了不让等待响应时影响整个app 一般放在子线程里执行
        Thread(Runnable {
   
            //构建请求体
            val request:Request = Request.Builder().url(url).build()
            //构造请求对象
            val call: Call = client.newCall(request)
            //发起同步请求execute——同步执行
            val response = call.execute()
            //execute执行完后
            val body = response.body?.string()
            Log.e("OkHttp","get response ${
     body}")
        }).start()
    }

}

3.2异步请求

//异步请求  能够在主线程
fun getAsync(url : String){
   
    //构建请求体
    val request:Request = Request.Builder().url(url).build()
    //构造请求对象
    val call: Call = client.newCall(request)
    //发起异步请求enqueue——异步执行无返回值
    call.enqueue(object :Callback
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值