黑马程序员技术交流社区

标题: 【济南校区】凯哥兵法之OkHttp基本使用 [打印本页]

作者: 孟凡凯老师    时间: 2016-5-8 22:55
标题: 【济南校区】凯哥兵法之OkHttp基本使用
本帖最后由 孟凡凯老师 于 2016-5-12 10:14 编辑

【济南校区】凯哥兵法之okHttp基本使用
概述
     OKHttp是Android版Http客户端。Google官方在6.0版本里面删除了HttpClient相关API,从Android4.4开始HttpURLConnection的底层实现采用的是okHttp。 非常高效,支持SPDY、连接池、GZIP和 HTTP 缓存,OKHttp会自动处理常见的网络问题,像二次连接、SSL的握手问题,
使用范围:
     1, OkHttp支持Android 2.3及其以上版本。
      2, 对于Java, JDK1.7以上。
下载地址
     jar包下载:https://github.com/square/okhttp
     Gradle配置:  compile'com.squareup.okhttp3:okhttp:3.2.0'
强烈建议关注JakeWharton的GitHub,另外像butterknifeNineOldAndroidsViewPagerIndicator比较常用的类库也是出自JakeWharton
使用
    OkHttp官方文档并不建议我们创建多个OkHttpClient,因此全局使用一个。
      GET请求方式:
  1. //1, 创建一个OkHttpClient对象
  2. OkHttpClient okHttpClient = new OkHttpClient();
  3. //2,构建一个请求对象
  4. Request request = new Request.Builder().url(url).build();
  5. //3,发送请求
  6.    try {
  7.      Call call = okHttpClient.newCall(request);
  8.      call.execute();
  9.      //4,打印服务端返回的json串
  10.      Log.i(TAG, "服务器返回的数据"+response.body().string());
复制代码
1.创建OkHttpClient对象
2.使用Request.Builder构建请求对象
3.发送请求有两种方式,一种是通过call.execute()返回一个Response,调用response.body().string()方法获取数据另一种是通过call.enqueue(Callbackcallback)方法,传入一个callback对象,实现请求成功和请求失败两个方法。
  1. call.enqueue(new Callback(){
  2.      @Override
  3.      public void onFailure(Request request, IOException e){
  4.      //请求失败后调用
  5.      }
  6.      @Override
  7.      public void onResponse(final Response response) throws IOException{         
  8.      //请求成功后调用
  9.      //此处并不是UI线程
  10.      Log.i(TAG, "服务器返回的数据"+response.body().string());
  11.      }
复制代码
4.获取服务器返回的数据 ,
        response.body().string()获取字符串,
        response.body().bytes()获取的事二进制字节数,
        response.body().byteStream()获取的是流数据。

POST请求提交表单:
  1. //1,创建一个OkHttpClient对象
  2. OkHttpClient okHttpClient = new OkHttpClient();
  3. //2,构建请求体
  4. RequestBody requestBody = new FormBody.Builder()
  5.           .add("userName", "xx")
  6.           .add("passWord", "xxxx")
  7.           .build();
  8. //3,构建一个请求对象
  9. Request request = new Request.Builder()
  10.           .url(url)
  11.          .post(requestBody)
  12.           .build();
  13. Response response = null;
  14. try {
  15.      //4,发送post请求
  16.      response = okHttpClient.newCall(request).execute();
  17.      //判断此请求是否成功
  18.      if(response.isSuccessful()){
  19.           //5,在post请求发送成功后,服务端返回的内容,
  20.           Log.i(TAG, "服务器返回的数据"+response.body().string());
  21.      }
  22. } catch (IOException e) {
  23.       e.printStackTrace();
  24. }
复制代码
通过以上代码可以看出okHttp的使用步骤:
1,创建一个OkHttpClient对象
2,构建请求体3,构建一个请求对象
4,发送请求
5,在post请求发送成功后,服务端返回的内容

POST请求提交JSON数据:
  1. //1,申明给服务端传递一个json串
  2. String jsonString="{'name':'tom','password':'xxx'}";
  3. //2,创建一个OkHttpClient对象
  4. OkHttpClient okHttpClient = new OkHttpClient();
  5. //3,创建一个RequestBody(参数1:数据类型 参数2: json数据)
  6. RequestBody requestBody = RequestBody.create(JSON, json);
  7. //4,创建一个请求对象
  8. Request request = new Request.Builder()
  9.         .url(url)
  10.         .post(requestBody)
  11.         .build();
  12. //5,发送请求获取响应对象
  13. try {
  14.     Response response = okHttpClient.newCall(request).execute();
  15.     //6,判断此请求是否成功
  16.     if(response.isSuccessful()){
  17.         //7,在post请求发送成功后,服务端返回的内容
  18.         Log.i(TAG, "服务器返回的数据"+response.body().string());
  19.     }
  20. } catch (IOException e) {
  21.     e.printStackTrace();
  22. }
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2