OKHttp介绍和实例展示

本文介绍了流行的网络框架OkHttp的特点及使用方法,包括连接池、GZIP压缩等优势,并提供了同步与异步请求示例,展示了如何使用OkHttp进行POST请求、文件上传以及JSON数据的解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OkHttp是现在当下比较流行的一个网络加载框架,可以使你在更加节约带宽的前提下高效的完成数据和媒体的传输

OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接池来减小响应延迟,还有透明的GZIP压缩,请求缓存等优势

我们直接看使用吧 >>>>>

注意异步访问网络的回调方法并不是在主线程中执行(前提:Android会让你新开线程去网络操作),回调接口的方法不是在主线程 回调方法不能操作界面 想要操作界面还是得handler


//先实例化一个OkHttpClient
OkHttpClient client = new OkHttpClient(); 

//创建一个请求 对请求进行 各种设置
Request request = new Request.Builder()
                    .url("url") //请求的地址
                    .build();
//同步执行
Response response = client.newCall(request).execute();

//异步执行  在回调函数中拿到响应数据   


//注意回调方法并不是在主线程中执行(Android会让你新开线程去网络操作)
//回调接口的方法不是在主线程  回调方法不能操作界面 想要操作界面还是得handler
client.newCall(request).enqueue(new Callback() {
   public void onFailure(Request request, IOException e) {}
   public void onResponse(Response response) throws IOException{}
});

//打印响应信息体信息
System.out.println("rs:" + response.body().toString());

//post提交  键值对
  RequestBody formBody = new FormEncodingBuilder()
    .add("name", "tp")
    .add("pass", "tp")
    .add("info", "reewsf")
    .build();

      Request request = new Request.Builder()
      .url(url)
      .post(body)
      .build();

Response response = client.newCall(request).execute();
/***************************************************/

//post请求 提交json数据到服务器
//定义Post请求体的类型
  public static final MediaType JSON
            = MediaType.parse("application/json; charset=utf-8");

 RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url("xxx")
                .post(body) //将请求信息体附带上
                .build();

//同步执行 
Response response = client.newCall(request).execute();

介绍几个常用的

Response的 isSuccessful >>判断是否成功的
Response.body().string(); >>将响应信息作为String类型返回
//Post方式提交文件

public static final MediaType MEDIA_TYPE_MARKDOWN
  = MediaType.parse("text/x-markdown; charset=utf-8");


    File file = new File("README.md");
    Request request = new Request.Builder()
       .url("https://api.github.com/markdown/raw")
       .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file)) //创建一个文件请求体
       .build();

    Response response = client.newCall(request).execute(); //执行
    //抛出异常提示
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

    System.out.println(response.body().string());

/*使用Gson来解析JSON响应Gson是一个在JSON和Java对象之间转换非常方便的api。这里我们用Gson来解析JSON响应。
注意:ResponseBody.charStream()使用响应头Content-Type指定的字符集来解析响应体。默认是UTF-8。*/

//创建一个Gson实例
private final Gson gson = new Gson();

 //创建请求
Request request = new Request.Builder()
       .url("xxxxx")
       .build();

//执行请求
Response response = client.newCall(request).execute();

//抛出自定义的异常
if(!response.isSuccessful())throw new IOException("error" + response);

//将响应信息 转换成对应的实体类
User user= gson.fromJson(response.body().charStream(), User .class);

}

class User {
   //...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值