1、OKHttp的主要功能:
- 联网请求文本数据
- 大文件下载
- 大文件上传
- 请求图片
2、OKHttp的使用
http://square.github.io/okhttp/
记得添加联网权限
<uses-permission android:name="android.permission.INTERNET"/>
1.使用OKHttp进行get和post请求
private void getDataFromByGet() {
new Thread(){
@Override
public void run() {
super.run();
try {
String resutl = get("http://api.m.mtime.cn/PageSubArea/TrailerList.api");
Message msg = Message.obtain();
msg.what = GET;
msg.obj = resutl;
handler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
/**
* get请求
* @param url
* @return
* @throws IOException
*/
private String get(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
private void getDataFromByPost() {
new Thread(){
@Override
public void run() {
super.run();
String resutl = null;
try {
resutl = post("http://api.m.mtime.cn/PageSubArea/TrailerList.api","");
Message msg = Message.obtain();
msg.what = POST;
msg.obj = resutl;
handler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
/**
* post请求
* @param url
* @param json
* @return
* @throws IOException
*/
private String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
2、通过Hanndler更新UI
联网请求不能在ui线程中执行,所以进行联网请求数据时,必须创建一个子线程用于请求网络数据,请求到的数据再通过一个全局的Handler传递message(请求到的数据)到ui线程,ui线程获取数据后可对数据进行操作。
Message msg = Message.obtain();
msg.what = POST;
msg.obj = resutl;
handler.sendMessage(msg);
上面代码中 POST为定义的常量,方便识别请求种类,result为请求到的数据。
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case GET://get请求
tv_result.setText(msg.obj.toString());
break;
case POST://post请求
tv_result.setText(msg.obj.toString());
break;
}
}
};
在Handler使用数据