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()办法等,这个就留到下一次的来探索。