乐趣区

关于okhttp:OKHttp一基础使用

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

退出移动版