视频加载失败

OkHttp3基本用法(一)

450 字
2 分钟
OkHttp3基本用法(一)
OkHttp3基本用法(一)

依赖包#

首先添加jar包,或着用maven或gradle自动导包。(我用的是3.9.1的包,自动导包时注意实际情况) maven:

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.9.1</version>
</dependency>

gradle:

compile 'com.squareup.okhttp3:okhttp:3.9.1'

注意:还需要okio的包 maven:

<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<version>1.13.0</version>
</dependency>

gradle:

compile 'com.squareup.okio:okio:1.13.0'

GET请求#

String path="http://rehtt.cn"; OkHttpClient okHttpClient=new OkHttpClient(); Request request=new Request.Builder() .url(path)
//如果要在request的的header添加参数。例如Cookie,User-Agent什么的:
.header("键", "值")
.header("键", "值")
.build(); Call call=okHttpClient.newCall(request); try {
Response response = call.execute();
Log.i("返回:",response.body().string()); //返回网页body标签内容
//body()有多种输出方法,如果是下载文件就是response.body().bytes(),response.code()获取返回的状态码
} catch (IOException e) {
e.printStackTrace();
}

POST请求#

post请求与get请求几乎一样,只是post需要提交表单,使用RequestBody。

RequestBody的数据格式都要指定Content-Type,常见的有三种:

application/x-www-form-urlencoded 数据是个普通表单 multipart/form-data 数据里有文件 application/json 数据是个json

普通表单:#

RequestBody body = new FormBody.Builder()
.add("键", "值")
.add("键", "值")
...
.build();

文件表单:#

RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(),RequestBody.create(MediaType.parse("image/png"), file))
.build();

另外如果你上传一个文件不是一张图片,但是MediaType.parse(“image/png”)里的”image/png”不知道该填什么,可以参考这个。

JSON表单:#

MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, "传入的json");

同步与异步#

上文采用call.execute()执行http请求,但这是一个同步动作,是在主线程运行的。如果在UI线程执行就会抛异常。

所以在UI线程执行就要用异步,将call.execute()替换:

call.enqueue(new Callback() {
@Override
//请求失败调用
public void onFailure(Call call, IOException e) {
}
@Override
//请求成功调用
public void onResponse(Call call, Response response) throws IOException {
Log.e("返回:",response.body().string());
}
});

onFailure()和onResponse()是在异步线程里执行的,所以如果你在Android把更新UI的操作写在这两个方法里面是会报错的,这个时候可以用runOnUiThread这个方法。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
OkHttp3基本用法(一)
https://rehtt.com/posts/10/
作者
Rehtt
发布于
2017-10-26
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Rehtt
Hello, I'm Rehtt.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
150
分类
17
标签
73
总字数
67,772
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录