OKHttp介绍和实例展示

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 {
   //...
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于OkHttp来说,可以通过它提供的ResponseBody来获取服务器返回的JSON数据和图片数据。 1. JSON解析 使用OkHttp获取服务器返回的JSON数据,可以通过如下步骤进行解析: ```java // 1. 创建OkHttpClient实例 OkHttpClient client = new OkHttpClient(); // 2. 创建Request对象 Request request = new Request.Builder() .url("http://www.example.com/api/get_data") .build(); // 3. 发送请求,获取Response对象 Response response = client.newCall(request).execute(); // 4. 获取ResponseBody对象 ResponseBody body = response.body(); // 5. 获取JSON字符串 String jsonStr = body.string(); // 6. 解析JSON数据 JSONObject jsonObject = new JSONObject(jsonStr); int code = jsonObject.getInt("code"); String message = jsonObject.getString("message"); ``` 以上代码中,我们通过OkHttpClient发送了一个请求,获取了服务器返回的Response对象,然后从Response对象中获取了ResponseBody对象,最后通过ResponseBody对象获取了JSON字符串。接下来,我们就可以使用Android提供的JSONObject或第三方库Gson、FastJson等来解析这个JSON字符串。 2. 图片解析 使用OkHttp获取服务器返回的图片数据,可以通过如下步骤进行解析: ```java // 1. 创建OkHttpClient实例 OkHttpClient client = new OkHttpClient(); // 2. 创建Request对象 Request request = new Request.Builder() .url("http://www.example.com/images/pic.png") .build(); // 3. 发送请求,获取Response对象 Response response = client.newCall(request).execute(); // 4. 获取ResponseBody对象 ResponseBody body = response.body(); // 5. 获取图片字节数组 byte[] bytes = body.bytes(); // 6. 将字节数组转换为Bitmap对象 Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); ``` 以上代码中,我们通过OkHttpClient发送了一个请求,获取了服务器返回的Response对象,然后从Response对象中获取了ResponseBody对象,最后通过ResponseBody对象获取了图片字节数组。接下来,我们可以使用Android提供的BitmapFactory将字节数组转换为Bitmap对象。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值