OkHttp的简单使用
来源:互联网 发布:tfboys三只的关系知乎 编辑:程序博客网 时间:2024/05/30 07:13
简单说一下学习okhttp的理由
1.
google在Android 6.0中删除了HttpClient的Api,采用的是则是okhttp
2.高效的使用HTTP,使应用运行更快更省流量
3.响应缓存数据避免重复网络请求
4.无缝的支持GZIP来减少数据流量
5.使用非常简单,请求和响应的Api具有流畅的建造和不变性,同时支持同步异步调用回调函数
6.如果网络出现问题,它会从常见的连接问题中恢复
7.如果服务器配置有多个IP地址,当第一个IP连接失败,它会尝试连接下一个IP
以上是okhttp官网http://square.github.io/okhttp/以及结合网上的一些理解整理出来的,看到有不对的地方还望大家多多指出
下面我们就开始学习怎么使用okhttp吧
配置环境
github地址:https://github.com/square/okhttp
在builde.gradle里面添加上
compile 'com.squareup.okhttp3:okhttp:3.8.0' 这两个那个都行《二选一》 compile 'com.squareup.okhttp3:okhttp:3.4.1'
在AndroidManifest.xml添加所需权限
<uses-permission android:name="android.permission.INTERNET" />
基本使用
get异步请求
通过get请求获取指定URL网页请求,这里要注意的是Android4.0以后需要在非主线程里使用。
private static OkHttpClient client = new OkHttpClient();public static void get(){ //创建一个Request Request request = new Request.Builder() .url("http://www.jianshu.com/") .get() .build(); //发起异步请求,并加入回调 client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call,IOException e){ //请求失败回调 } @Override public void onResponse(Call call,Response response) throws IOException{ //请求成功回调 Log.e("okHttp","get="+response.body().string()); } }); }
post异步请求
private static OkHttpClient client = new OkHttpClient(); public static void post(){ //创建Form表单对象,可以add多个键值队 FormBody formBody = new FormBody.Builder() .add("param","value") .add("param","value") .build(); //创建一个Request Request request = new Request.Builder() .url("http://www.jianshu.com/") .post(formBody) .build(); //发起异步请求,并加入回调 client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call,IOException e){ } @Override public void onResponse(Call call,Response response) throws IOException{ Log.e("okHttp","post="+response.body().string()); } }); }
同步请求
把client.newCall(request).enqueue(new Callback())改成client.newCall(request).execute().body().string()即可
文件上传与多文件上传
public static void upload(){ //多个文件集合 List<File> list = new ArrayList<>(); MultipartBody.Builder builder = new MultipartBody.Builder(); //设置为表单类型 builder.setType(MultipartBody.FORM); //添加表单键值 builder.addFormDataPart("param","value"); for (File file : list) { //添加多个文件 RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file); builder.addFormDataPart("files", file.getName(), fileBody); } Request request = new Request.Builder() .url("http://192.168.1.8/upload/UploadServlet") .post(builder.build()) .build(); //发起异步请求,并加入回调 mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call,IOException e){ } @Override public void onResponse(Call call,Response response) throws IOException{ Log.e("okHttp","updLoad="+response.body().string()); } }); }
超时设置,整个程序应使用这一个mOkHttpClient对象
public static void setTimeout(){ mOkHttpClient.newBuilder() .connectTimeout(10, TimeUnit.SECONDS)//10秒连接超时 .writeTimeout(10, TimeUnit.SECONDS)//10m秒写入超时 .readTimeout(10, TimeUnit.SECONDS)//10秒读取超时 .build(); }
文件下载其实很简单,只需要利用get同步或异步请求,然后通过client.newCall(request).execute().body().byteStream()获取InputStream输入流,写文件操作即可实现文件下载。
此文章 出自于http://www.jianshu.com/p/2fd64b3c7893
阅读全文
0 0
- OkHttp的简单使用
- OKHttp的简单使用
- OKHttp的简单使用
- OkHttp的简单使用
- okhttp的简单使用
- OkHttp的简单使用
- OkHttp的简单使用
- OkHttp的简单使用
- OkHttp的简单使用
- OkHttp 的简单使用
- okhttp的简单使用
- Okhttp的简单使用
- OKhttp的简单使用
- 简单的OkHttp使用介绍
- OkHttp框架的简单使用
- OkhttP的简单使用笔记
- Android okHttp的简单使用
- okhttp的简单使用例子
- 互联网架构(4):并发编程--Concurrent.util工具类
- 认识ajax
- nginx的upstream目前支持的5种方式的分配
- 线程里面使用注解---线程里使用注解的正确姿势
- lenna
- OkHttp的简单使用
- (一)Kafka中文教程-初识kafka
- Shader的介绍
- 【解决】linux下svn权限配置不起作用
- java基础提高篇--类型转换
- LeetCode 82. Remove Duplicates from Sorted List II pre指针,首元素的处理
- [笔记]: 树状数组
- [iOS] objc_setAssociatedObject objc_getAssociatedObject 简单明了的一个理解
- JVM加载class文件的原理机制