android 网络框架之okhttp3
来源:互联网 发布:三件套女装秋装淘宝 编辑:程序博客网 时间:2024/06/13 10:46
1.在android studio配置
添加权限
<uses-permission android:name="android.permission.INTERNET"/>
gradle配置
compile 'com.squareup.okhttp3:okhttp:3.2.0'compile 'com.squareup.okio:okio:1.7.0'
2.异步get请求和post请求
get请求
private void getAsynOkHttp() { 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("haookhttp", "cache---" + str); } else { response.body().string(); String str = response.networkResponse().toString(); Log.i("haookhttp", "network---" + str); } runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "hao请求成功", Toast.LENGTH_SHORT).show(); } }); } });}
post请求
private void postAsynOkHttp() { mOkHttpClient=new OkHttpClient(); RequestBody formBody = new FormBody.Builder() .add("size", "10") .build(); Request request = new Request.Builder() .url("http://www.baidu.com") .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("hao", str); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "hao请求成功", Toast.LENGTH_SHORT).show(); } }); } }); }
3.异步上传文件
添加权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
定义上传文件类型
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/text.txt"); Request request = new Request.Builder() .url("https://api.github.com/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("hao",response.body().string()); } }); }
如果想要改为同步的上传文件只要调用 mOkHttpClient.newCall(request).execute()就可以了。
4.异步下载文件
private void downAsynFile() { mOkHttpClient = new OkHttpClient(); String url = "http://img.my.csdn.net/uploads/201705/17/1_01.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/hao.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) { e.printStackTrace(); } Log.d("hao", "文件下载成功"); } });}
5.异步上传Multipart文件
定义上传文件类型
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
private void sendOkhttpMultipart(){ mOkHttpClient = new OkHttpClient(); RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("title", "hao") .addFormDataPart("image", "hao.jpg", RequestBody.create(MEDIA_TYPE_PNG, new File("/sdcard/hao.jpg"))) .build(); Request request = new Request.Builder() .header("Authorization", "Client-ID " + "...") .url("https://api.github.com/raw") .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("hao", response.body().string()); } });}
6.设置缓存和超时时间
okHttp3和OkHttp2.x有区别的是不能通过OkHttpClient直接设置超时时间和缓存了,而是通过OkHttpClient.Builder来设置,通过builder配置好OkHttpClient后用builder.build()来返回OkHttpClient,所以我们通常不会调用new OkHttpClient()来得到OkHttpClient,而是通过builder.build(),如下:
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();
7.取消请求和封装
call.cancel(),
阅读全文
1 0
- android 网络框架之okhttp3
- Android-网络框架01OKHttp3
- Android网络请求框架----okHttp3
- Android网络请求框架之——okhttp3
- Android OkHttp3网络请求框架使用入门
- 笔记:Android OkHttp3网络请求框架详解
- Android网络框架OKhttp3学习笔记
- Android 网络访问框架retrofit2,okhttp3之简单封装,kotlin源码
- android okhttp3框架使用
- 【Android新手笔记五】okhttp3网络通信框架
- 网络请求框架(OKHttp3.0)
- okhttp3的网络请求框架
- 网络请求篇--okhttp3框架
- Android之网络编程OkHttp3用法全解析
- Android网络请求框架----Okhttp3完全解析(2),封装框架
- Retrofit2+OkHttp3+RxJava搭建网络框架
- Retrofit2+OkHttp3+RxJava搭建网络框架
- Retrofit2+OkHttp3+RxJava构建网络框架
- STM32工程新建——基于MDK5
- 女黑客破解4款共享单车App 仅用1分钟
- DoTween要点记录
- Python中接口设计的相关包(zope.interface)
- angular设置路由实现无刷新跳转
- android 网络框架之okhttp3
- B1019. 数字黑洞 (20')
- Centos一键部署openstack RDO packstack
- 虚幻4相关的一些资料
- 理解tomcat之搭建简易http服务器
- 启动storm遇到的while scanning a simple key in 'reader', line 54, column 2: nimbus.host:"node1"
- HEVC代码学习12:xCheckRDCostInter函数
- Laravel5.4 发送mail邮件
- vim关于窗口分割的命令: