添加okhttp+android+studio,浅谈Android studio中OKHttp安装及简单使用

首先说一下2.x到3.x关于POST请求的请求体类的改变:

在2.x中是 类名是:FormEncodingBuilder()

使用FormEncodingBuilder builder = new FormEncodingBuilder();

builder.add("username","name");

在3.x中是 类名是: FormBody,但是一般使用是 RequestBody requestBodyPost = new FormBody.Builder()

需要说明一下FormBody是RequestBody的子类

2e614b78ea4b9a5b085538e5d8c0002f.png

本文采用3.x版本

//    请求参数:page=1&code=news&pageSize=20&parentid=0&type=1

RequestBody requestBodyPost = new FormBody.Builder()

.add("page", "1")

.add("code", "news")

.add("pageSize", "20")

.add("parentid", "0")

.add("type", "1")

.build();

默认请求方法是get方法,.get()可以省略

Request request = new Request.Builder()

.get()

.url(GET_URL)

.build();

Request requestPost = new Request.Builder()

.url(POST_URL)

.post(requestBodyPost)

.build();

然后通过request的对象去构造得到一个Call对象

//new call

Call call = mOkHttpClient.newCall(request);

//请求加入调度

call.enqueue(new Callback()

{

@Override

public void onFailure(Request request, IOException e)

{

}

@Override

public void onResponse(final Response response) throws IOException

{

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

}

});

需要注意几点:

onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通过response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()

onResponse执行的线程并不是UI线程,如果你希望操作控件,还是需要使用handler,runOnUiThread等操作ui

(二)基于Http的文件上传

上传文件和一般的带参数post请求不同之处在于RequestBody的构建

RequestBody的Builder和type因版本而已,2.x叫做MultipartBuilder,3.x叫做MultipartBody.Builder()。当我们需要做类似于表单上传的时候,就可以使用它来构造我们的requestBody。此处以3.x为例

File file = new File(Environment.getExternalStorageDirectory(), "balabala.mp4");

if (!file.exists()) {

Toast.makeText(MainActivity.this, "文件不存在", Toast.LENGTH_SHORT).show();

} else {

RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);

/* 2.x版本

RequestBody requestBody = new MultipartBuilder()

.type(MultipartBuilder.FORM)*/

RequestBody requestBody = new MultipartBody.Builder()

.setType(MultipartBody.FORM)

.addPart(Headers.of(

"Content-Disposition",

"form-data; name=\"username\""),

RequestBody.create(null, "cxc"))

/* .addPart(Headers.of(

"Content-Disposition",

"form-data; name=\"mFile\";

filename=\"wjd.mp4\""), fileBody)*/

.addFormDataPart("mFile", file.getName(), fileBody)

.addFormDataPart("thumb", file.getName(),

RequestBody.create(MediaType.parse("image/*"), file));

//添加其他参数

.addFormDataPart(key, value);

.build();

·····}

说明:

提交json数据,MediaType.parse("application/json; charset=utf-8");

上传图片,MediaType.parse("image/*");

提交String,MediaType.parse("text/x-markdown; charset=utf-8")

上传文件,MediaType.parse("application/octet-stream")

addPart和addFormDataPart方法本质是一样的

87c4bd47d8395f0c3991b6b272b39c0c.png

ed04cf39cf9725ee71d06e13e0839a58.png

通过上面设置上传图片,MP3,小的文件都没问题。

本文为博主原创文章,请尊重版权,未经博主允许不得转载,转载请注明出处:http://www.cnblogs.com/details-666/p/OKHttp.html

带有进度监听的上传下载请参考http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0904/3416.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值