OkHttp3详解
来源:互联网 发布:科勒淘宝授权 编辑:程序博客网 时间:2024/05/21 20:27
OkHttp3 官网 & website
1.Http协议简介
客户端向服务器发送一个Request,服务端收到Request并进行一系列的处理,返回给客户端一个Response
Http状态码简介(code为三位数)
1xx(临时响应) 2xx (成功)3xx (重定向) 4xx(请求错误)5xx(服务器错误)
2.快速使用(AndroidStudio)
①添加依赖 compile ‘com.squareup.okhttp3:okhttp:3.8.1’
②添加网络权限
③GET请求
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(url).build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e(TAG, "onFailure: "+ e.getLocalizedMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { String result = response.body().string(); Log.e(TAG, "onResponse: "+result); // 用完关闭资源 if (response.body()!=null){ response.body().close(); } } });
④Response里有这么两个方法
// response.isSuccessful();是否连接成功 状态码2xx // response.isRedirect();是否重定向 状态码3xx
⑤Post请求(form表单)
OkHttpClient client = new OkHttpClient(); // post请求需要传入一个RequestBody对象 // 直接点进去RequestBody,通过查看源码发现RequestBody是个抽象类 // RequestBody右键-->Go To-->Implementation(s) // 发现有两个具体实现类 FormBody(表单) MultiparBody(多种提交方式包括表单、文件等) RequestBody body; body = new FormBody.Builder().add("phone","12345678900").build(); Request request = new Request.Builder().url(postPath).post(body).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 { });
⑥Post(json形式)
OkHttpClient client = new OkHttpClient(); // json字符串 {"phone":"1234678900"} String jsonParams = new Gson().toJson(new Phone("1234678900")); RequestBody body = RequestBody.create(MediaType.parse("application/json"),jsonParams); Request request = new Request.Builder().url(postPath).post(body).build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override } });
⑦文件上传(表单形式上传文字和图片)
OkHttpClient client = new OkHttpClient(); String basePath = Environment.getExternalStorageDirectory().getAbsolutePath(); RequestBody fileBody1 = RequestBody.create(MediaType.parse("image/png"),new File(basePath+"img1.png")); RequestBody fileBody2 = RequestBody.create(MediaType.parse("image/png"),new File(basePath+"img2.png")); // .addFormDataPart("idcard_front_img","1",fileBody1) // 此处传"1",可能会在后台生成图片名.1这种形式的文件 // 为了便于管理可以写成addFormDataPart("idcard_front_img","png",fileBody1) // 传null可能会导致调用fail方法 RequestBody body = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("idcard_no","130233199560509xxxx") .addFormDataPart("idcard_front_img","1",fileBody1) .addFormDataPart("idcard_behind_img","2",fileBody2) .build(); Request request = new Request.Builder().url(imgPostPath).post(body).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.d(TAG,"上传成功"); } });
⑧文件下载
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(downLoadPath).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 { InputStream is = null; FileOutputStream fos = null; is = response.body().byteStream(); fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory().getAbsolutePath(),"xxx.apk")); byte[] b = new byte[1024]; int len = 0; while ((len = is.read(b))!=-1){ fos.write(b,0,len); fos.flush(); } is.close(); fos.close(); } });
⑨源码与效果 点我下载源码
阅读全文
1 0
- OkHttp3详解
- OkHttp3详解
- OkHttp3使用详解
- OkHttp3使用详解
- okhttp3使用详解
- OkHttp3使用详解
- Android okhttp3的使用详解
- OkHttp3
- OkHttp3
- OkHttp3
- OkHttp3
- OkHttp3
- Okhttp3
- okHttp3
- OkHttp3
- OkHttp3源码详解(一Request类)
- OkHttp3源码详解(二整体流程)
- 笔记:Android OkHttp3网络请求框架详解
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
- 浮点数的定点化
- eclipse集成svn不提交.classpath.project和.prefs文件
- Ubuntu 16.04下安装64位谷歌Chrome浏览器
- css 日常总结
- OkHttp3详解
- Git 常用命令 更新与提交
- UML简介
- 配置nginx https wss
- 04:求整数的和与均值
- FFXI-darkstar源码阅读
- SSH和SSM对比总结
- 2017.09.04
- 按第一列的相同名称合并行