android post用对象流,Android - 网络请求之OKHttp3

16c2cc230a8c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

老婆保佑,代码无BUG

目录

引用

基础用法

GET

post

使用FormBody传递键值对参数

使用RequestBody传递Json或File对象

使用MultipartBody同时传递键值对参数和File对象

自定义RequestBody实现流的上传

设置请求头

下载文件

封装

一.引用

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

二.基础用法

GET

private void initget() {

//创建okHttpClient对象

OkHttpClient mOkHttpClient = new OkHttpClient();

//创建一个Request

final Request request = new Request.Builder()

.url("http://apis.juhe.cn/mobile/get?phone=18856907654&key=5778e9d9cf089fc3b093b162036fc0e1")

.build();

//new call

Call call = mOkHttpClient.newCall(request);

//请求加入调度

call.enqueue(new Callback() {

@Override

public void onFailure(@NonNull Call call, IOException e) {

}

@Override

public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {

if (response.isSuccessful()) {//回调的方法执行在子线程。

String htmlStr = response.body().string();

Logger.e("htmlStr--->" + htmlStr);

Logger.e("response.code()==" + response.code());

}

}

});

}

POST

(1)使用FormBody传递键值对参数

private void initPost() {

OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象。

FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体

formBody.add("phone", "18856907654");//传递键值对参数

formBody.add("key", "5778e9d9cf089fc3b093b162036fc0e1");//传递键值对参数

Request request = new Request.Builder()//创建Request 对象。

.url("http://apis.juhe.cn/mobile/get")

.post(formBody.build())//传递请求体

.build();

}

(2)使用RequestBody传递Json或File对象

private void initPost1() {

OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象。

MediaType JSON = MediaType.parse("application/json; charset=utf-8");//数据类型为json格式,

String jsonStr = "{\"phone\":\"18856907654\",\"key\":\"5778e9d9cf089fc3b093b162036fc0e1\"}";//json数据.

RequestBody body = RequestBody.create(JSON, jsonStr);

Request request = new Request.Builder()

.url("http://apis.juhe.cn/mobile/get")

.post(body)

.build();

}

(3) 使用MultipartBody同时传递键值对参数和File对象

private void initPost2() {

OkHttpClient client = new OkHttpClient();

MultipartBody multipartBody =new MultipartBody.Builder()

.setType(MultipartBody.FORM)

.addFormDataPart("phone","18856907654")//添加键值对参数

.addFormDataPart("key","5778e9d9cf089fc3b093b162036fc0e1")

// .addFormDataPart("file","fileName",RequestBody.create(MediaType.parse("file/*"), new File("/user/allens/desktop/meinv.png")))//添加文件

.build();

final Request request = new Request.Builder()

.url("http://apis.juhe.cn/mobile/get")

.post(multipartBody)

.build();

(4)自定义RequestBody实现流的上传

private void initPost3() {

RequestBody body = new RequestBody() {

@Override

public MediaType contentType() {

return null;

}

@Override

public void writeTo(BufferedSink sink) throws IOException {//重写writeTo方法

FileInputStream fio = new FileInputStream(new File("fileName"));

byte[] buffer = new byte[1024 * 8];

if (fio.read(buffer) != -1) {

sink.write(buffer);

}

}

};

OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象。

Request request = new Request.Builder()

.url("http://www.baidu.com")

.post(body)

.build();

}

三.设置请求头

Request request = new Request.Builder()

.url("http://www.baidu.com")

.header("User-Agent", "OkHttp Headers.java")

.addHeader("token", "myToken")

.build();

四.下载文件

在OKHttp中并没有提供下载文件的功能,但是在Response中可以获取流对象,有了流对象我们就可以自己实现文件的下载。代码如下:

这段代码写在回调接口CallBack的onResponse方法中:

InputStream is = response.body().byteStream();//从服务器得到输入流对象

五.封装

参看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值