OkHttp
1、简单的使用
//创建OkHhttpClient对象
OkHttpClient okHttpClient=new OkHttpClient();
//创建一个Request对象
final Request request=new Request.Builder()
.url("http://www.tuling123.com/openapi/api?key=2772e31c6644959967936b6cc14a60&&info=%E8%AE%B2%E4%B8%AA%E7%AC%91%E8%AF%9D")
.build();
//通过okHttpClient新建一个Call对象
//传入一个request对象
//it cannot be executed twice.
final Call call=okHttpClient.newCall(request);
//请求加入任务调度
call.enqueue(
new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
//将获取到的数据转换成字符串
final String msg = response.body().string();
runOnUiThread(
new Runnable() {
@Override
public void run() {
tvData.setText(msg);
}
}
);
}
}
);
Ok,到这里我们还只是简单地使用了,感觉确实是比HttpUrlConnection使用起来要简单。
首先创建一个OkHttpClient对象。
再创建一个Request对象,在创建request的时候,传入url,同时可以设置方法等。
再通过OkHttpClient对象传入一个request参数创建一个Call对象
这里的API我删掉了几个字母,挺有意思的一个API,大家可以去注册一个,图灵机器人,百度一下就可以知道,请求的时候Info后面只要带上任意,就能返回一些数据,智能聊天机器人一样。上面是异步的方式去执行,当然也支持阻塞的方式,下面写下阻塞方式的。
new Thread(
new Runnable() {
@Override
public void run() {
try {
Response response=call.execute();
final String msg=response.body().string();
runOnUiThread(
new Runnable() {
@Override
public void run() {
tvData.setText(msg);
}
}
);
} catch (IOException e) {
e.printStackTrace();
}
}
}
).start();
因为不能在主线程里面进行网络操作,所以只能通过开启一个子线程去执行。我是这样理解阻塞和非阻塞的,阻塞就是,有一个任务,你要完成它才能去做其他的事情,不管等待的时间有多长,而非阻塞就是没完成的时候可以先去做别的事,比如你煮饭的时候,可以把饭煮在一边然后去玩把游戏,等到饭熟了你再出来吃饭。