Android OKHttp3 学习摘记
来源:互联网 发布:数据库系统概论 答案 编辑:程序博客网 时间:2024/06/10 08:24
Android网络编程(六)OkHttp3用法全解析 http://blog.csdn.net/itachi85/article/details/51190687 (推荐)
OkHttp3的基本用法 http://www.jianshu.com/p/1873287eed87 (有扩展)
封装推荐使用 OkHttpFinal https://github.com/pengjianbo/OkHttpFinal (基于OKHttp3)
Android Studio 配置gradle:
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okio:okio:1.7.0'
基本的类和方法:
OkHttpClient,OkHttpClient.Builder,Call,Callback
Request,Request.Builder,RequestBody,FormBody,FormBody.Builder
Call mcall= mOkHttpClient.newCall(request);
call.execute() 同步
call.enqueue(new Callbak{...}) 异步 //回调函数在非UI线程中执行,故不能直接操作UI
call.cancel() 取消
RequestBuilder.tag(tag)来分配一个标签
OkHttpClient.cancel(tag)来取消所有带有这个tag的call
GET请求
private void getAsynHttp() { mOkHttpClient=new OkHttpClient(); Request.Builder requestBuilder = new Request.Builder().url("http://www.baidu.com"); //可以省略,默认是GET请求 requestBuilder.method("GET",null); Request request = requestBuilder.build(); Call mcall= mOkHttpClient.newCall(request); mcall.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if (null != response.cacheResponse()) { String str = response.cacheResponse().toString(); Log.i("wangshu", "cache---" + str); } else { response.body().string(); String str = response.networkResponse().toString(); Log.i("wangshu", "network---" + str); } runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show(); } }); } }); }
POST请求
private void postAsynHttp() { mOkHttpClient=new OkHttpClient(); RequestBody formBody = new FormBody.Builder() .add("size", "10") .build(); Request request = new Request.Builder() .url("http://api.1-blog.com/biz/bizserver/article/list.do") .post(formBody) .build(); Call call = mOkHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String str = response.body().string(); Log.i("wangshu", str); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show(); } }); } }); }
异步上传文件
public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8"); private void postAsynFile() { mOkHttpClient=new OkHttpClient(); File file = new File("/sdcard/wangshu.txt"); Request request = new Request.Builder() .url("https://api.github.com/markdown/raw") .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file)) .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.i("wangshu",response.body().string()); } }); }
异步下载文件
private void downAsynFile() { mOkHttpClient = new OkHttpClient(); String url = "http://img.my.csdn.net/uploads/201603/26/1458988468_5804.jpg"; Request request = new Request.Builder().url(url).build(); mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) { InputStream inputStream = response.body().byteStream(); FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream(new File("/sdcard/wangshu.jpg")); byte[] buffer = new byte[2048]; int len = 0; while ((len = inputStream.read(buffer)) != -1) { fileOutputStream.write(buffer, 0, len); } fileOutputStream.flush(); } catch (IOException e) { Log.i("wangshu", "IOException"); e.printStackTrace(); } Log.d("wangshu", "文件下载成功"); } }); }
异步上传Multipart文件
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");private void sendMultipart(){ mOkHttpClient = new OkHttpClient(); RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("title", "wangshu") .addFormDataPart("image", "wangshu.jpg", RequestBody.create(MEDIA_TYPE_PNG, new File("/sdcard/wangshu.jpg"))) .build(); Request request = new Request.Builder() .header("Authorization", "Client-ID " + "...") .url("https://api.imgur.com/3/image") .post(requestBody) .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.i("wangshu", response.body().string()); } });}
设置超时时间和缓存
File sdcache = getExternalCacheDir(); int cacheSize = 10 * 1024 * 1024; OkHttpClient.Builder builder = new OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .writeTimeout(20, TimeUnit.SECONDS) .readTimeout(20, TimeUnit.SECONDS) .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize)); OkHttpClient mOkHttpClient=builder.build();
阅读全文
0 0
- Android OKHttp3 学习摘记
- android Volley 学习摘记
- Android RxJava 学习摘记
- Java(Android)注解学习摘记
- Android网络框架OKhttp3学习笔记
- OkHttp3学习
- 学习摘记
- android学习摘记——自定义Adapter的心得
- android学习摘记——自定义Adapter的心得
- Android学习摘记——自定义Adapter的心得
- android学习摘记——TabHost使用代码
- android studio 首次安装配置和 gradle 语法学习摘记
- 关于OkHttp3的学习
- OkHttp3源码学习简要
- OKHttp3学习记录
- okHttp3学习总结
- okhttp3.0学习
- okhttp3.8.1 学习笔记
- Qt之QAbstractButton
- C语言实验——交换两个整数的值(顺序结构)
- Flume 架构及部署
- 下拉列表
- Vue + exif实现图片旋转
- Android OKHttp3 学习摘记
- 多对多业务,数据库水平切分架构一次搞定
- Glide获取某个url对应的缓存图片
- 用户信息:奇偶数隔行变色,选中行变色,鼠标变小手样式;姓名查询条件,过滤敏感字符;下拉列表排序;非空验证添加信息;点击按钮删除
- Spring "reg:zookeeper" 的前缀 "reg" 未绑定等类似问题解决方案。
- Spark性能优化之开发调优
- sql 语句查询今天、昨天、近7天、近30天、一个月内、上一月 数据
- HDU
- 【转】javascript 中英文字符长度和截断处理