第一步(接口方法):
@Multipart @POST("xx/xx") Observable<JsonObject> uploaddata(@PartMap Map<String, RequestBody> params);
其中,@POST内字符串是服务器接口地址,返回数据类型为JsonObject;
第二步:通过Rxjava调用接口方法:
public void uploadData(Map<String, RequestBody> params){ UoloadDataAPI.Creator.newInstace().uploaddata(params) .observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()) .subscribe(new Subscriber<JsonObject>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { e.printStackTrace(); } @Override public void onNext(JsonObject jsonObject) { } });
第三步:在程序中使用。
(1)构造Map<String, RequestBody> params参数;(有一个坑,文档上图片并没有详细说明要求,我代码注视部分直接使用图片原名字,可能会包含汉字,导致后台处理出错,也就是返回php错误,关键ios没有汉字,所以一直好使,然后android便与后台发生了一系列相爱相杀的事情。)
/** * 填充图片数据实际效果 * * @param paths */ public Map<String, RequestBody> setImageMap(List<String> paths){ Map<String,RequestBody> photos = new HashMap<>(); if (paths.size()>0){ for (int i=0;i<paths.size();i++) { // String substring = paths.get(i).substring(paths.get(i).lastIndexOf("/") // + 1, paths.get(i).length()); photos.put("userfile[]\";filename=\""+i+"issue.png\"",RequestBody.create(MediaType.parse("image/*"), new File(paths.get(i)))); } } return photos; }
(2)调用RxJava上传
UploadDataNetManager manager = new UploadDataNetManager(); manager.uploadData(params);