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 {
//...
}