Android 网络-->okhttp
来源:互联网 发布:汉朝使者知乎 编辑:程序博客网 时间:2024/05/29 17:02
- 一个okhttp3请求的流程
- 异步GET请求
- 异步POST请求
- 异步上传文件
- 异步上传Multipart文件
一个okhttp3请求的流程
首先看一下okhttp3的异步GET/POST请求、文件上传/下载,异步上传Multipart文件。
异步GET请求
以请求淘宝为例
private void getAsynHttp() {//创建okHttpClient对象 mOkHttpClient=new OkHttpClient();//创建一个Request Request.Builder requestBuilder = new Request.Builder().url("https://www.taobao.com/"); //可以省略,默认是GET请求 requestBuilder.method("GET",null); Request request = requestBuilder.build();//new call 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("gt", "cache---" + str); } else { response.body().string(); String str = response.networkResponse().toString(); Log.i("gt", "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("gt", str); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show(); } }); } });}
异步上传文件
上传文件本身也是一个POST请求,首先定义上传文件类型:
public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8");
将sdcard根目录的gt.txt文件上传到服务器上:
private void postAsynFile() { mOkHttpClient=new OkHttpClient(); File file = new File("/sdcard/gt.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("gt",response.body().string()); } }); }
如果想要改为同步的上传文件只要调用 mOkHttpClient.newCall(request).execute()就可以了。
当然不要忘了添加如下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
异步下载文件
在这里下载一张图片,我们得到Response后将流写进我们指定的图片文件中就可以了
rivate 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("gt", "IOException"); e.printStackTrace(); } Log.d("gt", "文件下载成功"); } }); }
异步上传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", "gt") .addFormDataPart("image", "gt.jpg", RequestBody.create(MEDIA_TYPE_PNG, new File("/sdcard/gt.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("gt", response.body().string()); } });}
0 0
- Android 网络okHttp基础
- Android网络okhttp/Volley
- Android 网络-->okhttp
- (Android网络3)okhttp
- okhttp,Android网络框架学习之OKHttp
- Android网络编程七:OkHttp
- Android 网络--Volley+OkHttp+Https
- Android 网络: Volley+OkHttp+Https
- Android网络请求:OkHttp实战
- Android 网络框架OKHttp学习
- android 网络框架解析--OKHttp
- Android 网络操作库 okhttp
- Android网络缓存,retrofit+okhttp
- Android 网络请求库:okHttp
- Android网络框架-OkHttp使用
- Android网络框架-OkHttp使用
- Android网络框架OKHttp初解
- Android封装OkHttp网络请求
- 浅析PCA
- 框架实例
- 照片墙-浮动定位+相对定位
- iOS 实用功能汇总(1)
- send和recv函数解析(转)
- Android 网络-->okhttp
- 快坚持不住了
- plupload上传图片等文件到七牛云平台
- BZOJ 1227: [SDOI2009]虔诚的墓主人 数状数组
- PHP安装配置
- js去空格、去重函数
- swustoj大整数乘法(0447)
- 一个小方法解决RGBA不兼容IE8
- jquery attr()方法获取input的checked属性问题