Android通过JSON传输图片,Retrofit 通过 POST 提交 JSON 数据、多图片多文件上传

Retrofit通过POST提交JSON数据、图片文件

前言:最近做的项目采用了retrofit框架,但是遇到了传图片和json数据的需求,就不会用了,经过长时间的搜索与亲身测试,终于将这两种需求的处理方式都学会了,现在分享给大家,也用于自己记录,万一哪天忘了怎么用,再拿出来温习一下。这也是2016年最后一篇博客。

提交json数据

准备:

androidstudio,最新的Retrofit,如果用的是eclipse就进去下载jar,解析方面自己研究吧,添加如下依赖到module的Gradle中 compile 'com.squareup.retrofit2:retrofit:2.1.0'

compile 'com.squareup.retrofit2:converter-gson:2.1.0'

compile 'io.reactivex:rxjava:1.1.9'

compile 'io.reactivex:rxandroid:1.2.1'复制代码

,最后准备好你的model类,组装好了的,开车。。

1、现在我有个需求是添加一条数据,还要用户的key验证,请求如下处理

,先写api: public interface IAddPicBase{

@Multipart

//@Headers({MEDIA_TYPE_JsonHeader, MEDIA_TYPE_JsonHeaderAccept})//这一行很多网友都加上了,我加上出错,删了就好了 各位自行测试吧 @Query("key") String key,

@POST(UrlManager.AddPicBaseUrl)

Observable addPicBase( @PartMap Map params);

}复制代码

然后, Map params = new HashMap<>();

params.put("key", RequestBody.create(MediaType.parse(Constant.MEDIA_TYPE_Text), ((AddInMineActivity) getActivity()).getKey()));

Gson gson = new Gson();

params.put("parameter", RequestBody.create(MediaType.parse(Constant.MEDIA_TYPE_Json), gson.toJson(addPicModel)));// 格式一点也不能错

Observer observer = new Observer() {

@Override

public void onCompleted(){

}

@Override

public void onError(Throwable e){

}

@Override

public void onNext(AddSupply addSupply){

}

};

//下面这些可能跟各位使用的封装不同,没关系,只要调用api里传参正确就行,错不了的 ,因为retrofit是类型安全的。。

RetrofitUtil upload = new RetrofitUtil(UrlManager.commonUrl2);

Retrofit retrofit = upload.getRetrofit();

IAddPicBase iAddPicBase = retrofit.create(IAddPicBase.class);

subscription = iAddPicBase.addPicBase(params).//((AddInMineActivity) getActivity()).getKey()

subscribeOn(Schedulers.io())//在子线程请求网络

.observeOn(AndroidSchedulers.mainThread())//在主线程处理UI显示

.subscribe(observer);//在主线程处理的逻辑通过RxJava的观察者处理

注: final public static String MEDIA_TYPE_Text = "text/plain";

final public static String MEDIA_TYPE_Json = "application/json;charset=utf-8";复制代码

提交图片

准备工作跟前面一样。。我看了一下代码,其实套路一样,只不过多图上传有新套路,见代码,一张图自然不用for循环,但是参数名要有数组的那种形式比如pic[0], Map params = new HashMap<>();

params.put("key", RequestBody.create(MediaType.parse(Constant.MEDIA_TYPE_Text), ((AddInMineActivity) getActivity()).getKey()));

for (int i = 0; i < toUpPathList.size(); i++) {

String path = toUpPathList.get(i);

File file = ImageUtils.compressImage(getContext(), path);

if (file != null && file.exists()) {

params.put("pic[" + i + "]" + Constant.ParamFile + file.getName(), RequestBody.create(MediaType.parse(Constant.MEDIA_TYPE_JPEG), file));// 格式一点也不能错

}

}

注:final public static String MEDIA_TYPE_JPEG = "image/jpeg";复制代码

有问题欢迎评论,一起搞事情。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值