okhttp的使用及详解
2017-09-27 18:54
369 查看
okhttp的优势
允许连接到同一个主机地址的所有请求,提高请求效率 共享Socket,减少对服务器的请求次数
通过连接池,减少了请求延迟
缓存响应数据来减少重复的网络请求
减少了对数据流量的消耗
自动处理GZip压缩
okhttp的功能
get,post请求文件的上传下载
加载图片(内部会图片大小自动压缩)
支持请求回调,直接返回对象、对象集合
支持session的保持
okhttp的使用
1.配置环境导包1 dependencies { 2 ...... 3 compile 'com.squareup.okhttp3:okhttp:3.7.0' 4 compile 'com.squareup.okio:okio:1.12.0' 5 ...... 6 }
2.使用okhttp实现解析服务器端json文件 get请求
1 OkHttpClient okHttpClient = new OkHttpClient.Builder() 2 //设置连接超时时间 3 .connectTimeout(20, TimeUnit.SECONDS) 4 //设置读取超时时间 5 .readTimeout(20, TimeUnit.SECONDS) 6 .build(); 7 //创建一个请求对象,url指向json文件的网络地址 8 String url = "http://10.254.9.35:8080/update.json"; 9 Request request = new Request.Builder() 10 //设置请求方式 11 .get() 12 //设置请求路径 13 .url(url) 14 .build(); 15 //通过客户端把请求发出去 16 Call call = okHttpClient.newCall(request); 17 //处理请求的结果 18 call.enqueue(new Callback() { 19 @Override 20 public void onFailure(Call call, IOException e) { 21 //请求失败 22 Log.i(TAG, "onFailure"); 23 System.out.println("请求失败"); 24 } 25 26 @Override 27 public void onResponse(Call call, Response response) throws IOException { 28 //请求成功 29 Log.i(TAG, "onResponse"); 30 System.out.println("请求成功"); 31 //获取服务器中json数据 32 ResponseBody body = response.body(); 33 String json = body.string(); 34 try { 35 //解析json数据 36 JSONObject jsonObject = new JSONObject(json); 37 desc = jsonObject.getString("desc"); 38 downloadUrl = jsonObject.getString("downloadUrl"); 39 int remoteversionCode = jsonObject.getInt("versionCode"); 40 //解析json文件后的操作 41 .... 42 } catch (Exception e) { 43 e.printStackTrace(); 44 } 45 } 46 });
3.使用okhttp下载文件
1 //判断sd卡状态是否可用 2 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 3 4 //设置sdk存储路径 5 String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "aa.apk"; 6 // 使用okHttpClient进行下载 7 OkHttpClient okHttpClient = new OkHttpClient.Builder() 8 .connectTimeout(20, TimeUnit.SECONDS) 9 .readTimeout(20, TimeUnit.SECONDS) 10 .build(); 11 Request request = new Request.Builder() 12 .get() 13 .url(downloadUrl) 14 .build(); 15 okHttpClient.newCall(request).enqueue(new Callback() { 16 @Override 17 public void onFailure(Call call, IOException e) { 18 //请求失败 19 } 20 21 @Override 22 public void onResponse(Call call, Response response) throws IOException { 23 //请求成功 24 ResponseBody body = response.body(); 25 //通过字符流读取文件内容 26 InputStream inputStream = body.byteStream(); 27 //在本地新建文件,将读取的文件内容写入在新建的本地中 28 File file = new File(path); 29 FileOutputStream fos = new FileOutputStream(file); 30 int len = 0; 31 byte[] bytes = new byte[1024]; 32 33 while ((len = inputStream.read(bytes)) != -1) { 34 fos.write(bytes, 0, len); 35 36 } 37 38 } 39 }); 40 41 }
相关文章推荐
- OkHttp使用详解——完全版
- 详解Android中使用OkHttp发送HTTP的post请求的方法
- okhttp使用详解和原理
- Android okhttp3的使用详解
- Okhttp使用详解
- OkHttp使用详解
- Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架
- OkHttp使用详解一
- OkHttp使用详解
- OKHttp使用详解
- Android中okhttp3使用详解
- OKHttp使用详解及源码解析
- OKHttp使用详解,步骤挺详细的,适合初学者使用!
- Android OkHttp的简单使用和封装详解
- OkHttp的使用详解
- Android OkHttp 网络请求 使用详解
- Okhttp使用详解
- OkHttp3使用详解
- Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架
- OkHttp3使用详解