OkHttp3的使用
来源:互联网 发布:adobe xd for mac 编辑:程序博客网 时间:2024/05/18 00:01
OkHttp3的使用
Android Studio的导入
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okio:okio:1.6.0'
compile 'com.squareup.okio:okio:1.6.0'
1、GET请求
String url = "https://www.baidu.com/";
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Call call = okHttpClient.newCall(request);
try {
Response response = call.execute();
System.out.println(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
Response response = call.execute();这个是同步的
回调也可用
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
button.setText("false");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Message msg = Message.obtain();
msg.obj = response.body().string();
msg.what = 111;
handler.sendMessage(msg);
runOnUiThread(new Runnable() {
@Override
public void run() {
button.setText("true");
}
});
}
});
@Override
public void onFailure(Call call, IOException e) {
button.setText("false");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Message msg = Message.obtain();
msg.obj = response.body().string();
msg.what = 111;
handler.sendMessage(msg);
runOnUiThread(new Runnable() {
@Override
public void run() {
button.setText("true");
}
});
}
});
只不过这个是异步的,可以调用runOnUiThread()去UI线程操作
2、POST请求
RequestBody body = new FormBody.Builder()
.add("键", "值")
.add("键", "值")
...
.build();
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
用一个
RequestBody去传参数
post请求创建request和get是一样的,只是post请求需要提交一个表单,就是RequestBody。表单的格式有好多种,普通的表单是:
RequestBody body = new FormBody.Builder() .add("键", "值") .add("键", "值") ... .build();
RequestBody的数据格式都要指定Content-Type,常见的有三种:
- application/x-www-form-urlencoded 数据是个普通表单
- multipart/form-data 数据里有文件
- application/json 数据是个json
但是好像以上的普通表单并没有指定Content-Type,这是因为FormBody继承了RequestBody,它已经指定了数据类型为application/x-www-form-urlencoded。
private static final MediaType CONTENT_TYPE = MediaType.parse("application/x-www-form-urlencoded");
再看看数据为其它类型的RequestBody的创建方式。
如果表单是个json:
MediaType JSON = MediaType.parse("application/json; charset=utf-8");RequestBody body = RequestBody.create(JSON, "你的json");
如果数据包含文件:
RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/png"), file)) .build();
上面的MultipartBody也是继承了RequestBody,看下源码可知它适用于这五种Content-Type:
public static final MediaType MIXED = MediaType.parse("multipart/mixed");public static final MediaType ALTERNATIVE = MediaType.parse("multipart/alternative");public static final MediaType DIGEST = MediaType.parse("multipart/digest");public static final MediaType PARALLEL = MediaType.parse("multipart/parallel");public static final MediaType FORM = MediaType.parse("multipart/form-data");
另外如果你上传一个文件不是一张图片,但是MediaType.parse("image/png")里的"image/png"不知道该填什么,可以参考下这个页面。
阅读全文
1 0
- okhttp3的简单使用
- okhttp3的使用
- OkHttp3的使用
- okHttp3的简单使用
- OKhttp3的基本使用
- OkHttp3的使用
- okhttp3基础使用的封装
- Android okhttp3的基本使用
- OkHttp3的使用,代码奉上
- okhttp3版 piccaso的使用
- Android okhttp3的使用详解
- okhttp3基础使用的封装
- Android OKHttp3的初级使用
- OkHttp3网络协议的使用
- OkHTTP3齐全的初级使用
- android Okhttp3的基本使用
- OkHttp3.0的基本使用
- OkHttp3拦截器的使用
- 计算机网络实验ethereal
- C# 线程控制
- Scene(场景)的使用
- Activity#finish() 对其生命周期的影响
- Intellij idea項目中无法创建scala class的解决办法
- OkHttp3的使用
- JavaScript 基础1
- [week 8][Leetcode][Dynamic Programming] Maximum Subarray
- 波纹动画
- Java并发编程基础
- Semaphore 源码分析
- iOS学习之 plist文件的读存
- jdk的配置
- 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?