OkHttp(一)
1 简介
OkHttp是现今一个较为出众的网络通信库,能够代替原生的 HTTPURLConnection,反对 Http/SPDY, 有着简略易用,拓展性好等长处。
2 HttpURLConnecti
让咱们先看看未应用 OkHttp 要怎么实现网络申请。
在未应用框架前,咱们基本上会应用原生的 HttpClient(已淘汰)和 HttpURLConnection 来进行发送 HTTP 申请。
HttpURLConnection 是一种多用途、轻量级的 HTTP 客户端,咱们大部分的应用程序能够应用它来进行 HTTP 操作。接下来简略应用其来发送一个 Get 办法的 Http 申请。
留神以下操作都是在 子线程 下进行的
- (1)获取 HttpURLConnection 的实例
// 用 URL 对象来创立 HttpURLConnection
URL murl = new URL("https://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection)murl.openConnection;
// 设置参数(超时工夫,读取超时,申请办法,header 等
connection.setConnectionTimeout(8888);
connection.setRequestMethod("GET");
...
// POST 申请还要将参数写入到输入流中
- (2)连贯并获取输出流,并对其解决
connection.connect();
mInputSteam = connection.getInputSteam();
// 可选
int code = mHttpURLConnection.getResponseCode();
String respose = converStreamToString(mInputStream);
Log.i("baidu", "申请状态码:" + code + "\n 申请后果:\n" + respose);`
// 依据理论状况,来判断如何解决流数据
mInputSteam.close();
- (3)敞开连贯
connection.disconnect();
以上就是 HttpURLConnection 的一个基本操作。
3 OkHttp 的应用
3.1 Get 申请
// 建造者模式构建对象
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.get()
.url("https://www.4399.com")
.build();
Call call = client.newCall(request);
try {//1. 同步申请调用的办法是 call.execute(),外部采纳的是线程阻塞(始终期待直到线程返回后果)形式间接将后果返回到 Response
Response response = call.execute();
//2. 异步申请调用的办法是 call.enqueue(Callback callback),该办法须要传入一个 Callback 期待后果回调的接口
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {Log.w("cozing", "申请失败");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
// 在这里解决失去的 Response
Log.w("cozing", "申请胜利");
}
});
} catch (IOException e) {e.printStackTrace();
}
3.2 Post 申请
OkHttpClient client = new OkHttpClient();
// 将参数结构成表单对象
FormBody formBody = new FormBody.Builder()
.add("username", "admin")
.add("password", "admin")
.build();
Request request = new Request.Builder()
.post(formBody)
.url("https://www.4399.com")
.build();
Call call = client.newCall(request);
try {Response response = call.execute();
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {Log.w("cozing", "申请失败");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
// 在这里解决失去的 Response
Log.w("cozing", "申请胜利");
}
});
} catch (IOException e) {e.printStackTrace();
}
以上就是 OkHttp 的一个根本应用,咱们不难看出因为其对网络申请性能进行了封装,使得整体的代码变得更加的简洁明了。
从下面的代码中,咱们不难看出,有几个较为重要的对象和办法,如 Request,Call, Response 对象,execute(),enqueue()办法等,这个就留到下一次的来探索。