一.添加okhttp的dependence依赖:
//okhttp
compile 'com.squareup.okhttp:okhttp:2.5.0'
//gson
compile 'io.github.openfeign:feign-gson:9.3.1'
二.OkHttp的操作
1.创建客户端 OkHttpClient
OkHttpClient okHttpClient=new OkHttpClient();
2.使用Get()方式 或 Post()(带参数)方式访问
1>.Get()访问
1.请求对象
Request request = new Request.Builder().url(url).build();
2.响应对象
同步,execute()方法还是在这个线程并没有 开启子线程 所以 如果这代码是在主线程里是会报错的
Response response = okHttpClient.newCall(request).execute();
异步,enqueue()方法开启子线程
Response response = okHttpClient.newCall(request).enqueue(new Callback(){
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
获取响应response.body()返回ResponseBody类
enqueue() 开一个子线程进行网络执行部分
这里要注意操作到主线程 这样这里就可以写UI操作了 具体下一篇会讲到
}
});
3.获取响应
response.body()返回ResponseBody类 (注:用了异步就直接可以在onResponse里操作)
response.body().string(); 返回String
response.body().byteStream(); 返回 inputStream
response.body().bytes(); 返回二进制字节数组
2>.Post() 提交键值对 访问
//键值对 初始化添加各个属性 add(String name, String value)
RequestBody formBody = new FormEncodingBuilder()
.add(“属性名”, “属性值”)
.add(“name”, “bug”)
.build();
1.请求对象
与get的不同点 提交参数post()我们这里提交一个formBody
Request request = new Request.Builder().url(url).post(formBody ).build();
2.响应对象
同步,execute()方法还是在这个线程并没有 开启子线程 所以 如果这代码是在主线程里是会报错的
Response response = okHttpClient.newCall(request).execute();
异步,enqueue()方法开启子线程
Response response = okHttpClient.newCall(request).enqueue(new Callback(){
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
获取响应response.body()返回ResponseBody类
enqueue() 开一个子线程进行网络执行部分
我们可以在自定义callback类继承Callback 实现onResponse操作到主线程 这样这里就可以写UI操作了具体下一篇会讲到
}
});
3.获取响应
response.body()返回ResponseBody类 (注:用了异步就直接可以在onResponse里操作)
response.body().string(); 返回String
response.body().byteStream(); 返回 inputStream
response.body().bytes(); 返回二进制字节数组
3>.Post() 提交 参数为Josn 访问
//json 定义
public static final MediaType JSON = MediaType.parse(“application/json; charset=utf-8”);
1.请求对象
与get的不同点 提交参数post()我们这里提交一个json
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder().url(url).post(body).build();
2.响应对象
同步,execute()方法还是在这个线程并没有 开启子线程 所以 如果这代码是在主线程里是会报错的
Response response = okHttpClient.newCall(request).execute();
异步,enqueue()方法开启子线程
Response response = okHttpClient.newCall(request).enqueue(new Callback(){
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
获取响应response.body()返回ResponseBody类
enqueue() 开一个子线程进行网络执行部分
我们可以在自定义callback类继承Callback 实现onResponse操作到主线程 这样这里就可以写UI操作了具体下一篇会讲到
}
});
3.获取响应
response.body()返回ResponseBody类 (注:用了异步就直接可以在onResponse里操作)
response.body().string(); 返回String
response.body().byteStream(); 返回 inputStream
response.body().bytes(); 返回二进制字节数组