android怎么选择对象类型的,android – 如何在OkHttpClient中将对象(即UserData)类型的列表添加到MultipartBody...

我有一个ObjectList,我需要放入我的MultipartBody.Builder.I尝试使用.addFormDataPart的不同方法,但没有工作.这就是我将它放入请求的方式.任何帮助,将不胜感激.谢谢

我在服务器上的JSON格式如下

{

"formData": [

{

"name": "string",

"value": {

any-object(string,file,long....etc)

}

}

],

"tripId": "string"

}

这就是我这样做的方式

private RequestBody getMultipartData(Object postData) {

MultipartBody.Builder formBody = new MultipartBody.Builder();

formBody.setType(MultipartBody.FORM);

ArrayList arrayList = null;

if (postData instanceof OnboardPresenterImpl.TripRequest) {

OnboardPresenterImpl.TripRequest tripRequest = ((OnboardPresenterImpl.TripRequest) postData);

formBody.addFormDataPart("tripId", tripRequest.getTripId());

arrayList = tripRequest.getFormData();

}

if (arrayList != null && arrayList.size() > 0) {

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

UserData userData = arrayList.get(i);

String value = userData.getValue().toLowerCase();

if (value.contains("/") && (value.contains(".png") ||

value.contains(".jpeg") || value.contains(".jpg"))) {

MediaType type = Util.getMediaType(value);

File sourceFile = new File(value);

if (sourceFile.exists()) {

formBody.addFormDataPart(userData.getName(),

sourceFile.getName(),RequestBody.create(type, sourceFile));

}

} else {

formBody.addFormDataPart(userData.getName(), value);

}

}

}

return formBody.build();

}

解决方法:

几天后,我找出了解决方案

String uploadMultipleFiles(Api api, HashMap> fileListMap)

throws IOException {

String responseS;

OkHttpClient timeOut = getOkHttpClient(api.getTimeOut());

MultipartBody.Builder multipartBuilder = new MultipartBody.Builder()

.setType(MultipartBody.FORM);

int j = 0;

ArrayList fileList;

for (Map.Entry> entry : fileListMap.entrySet()) {

String key = entry.getKey();

fileList = entry.getValue();

multipartBuilder.addFormDataPart("data[" + j + "].name", key);

if (fileList != null) {

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

File fileListRequest = fileList.get(i);

if (fileListRequest.exists()) {

String ext = CommonUtils.getExtension(fileListRequest.getName());

/* Changing Media Type whether JPEG or PNG **/

final MediaType MEDIA_TYPE = ext.endsWith("png") ? MEDIA_TYPE_PNG :

ext.endsWith("jpg") ? MEDIA_TYPE_JPG : MEDIA_TYPE_JPEG;

multipartBuilder.addFormDataPart("data[" + j + "].files[" + i + "]",

fileListRequest.getName(),

RequestBody.create(MEDIA_TYPE, fileListRequest));

}

}

}

j++;

}

RequestBody requestBody = multipartBuilder.build();

Request.Builder requestBuilder = new Request.Builder()

.url(Objects.requireNonNull(api.getUrl()))

.post(requestBody);

buildHeaders(requestBuilder);

Response response = timeOut.newCall(requestBuilder.build()).execute();

responseS = response.body().string();

Log.i(api.getName().name(), responseS);

return responseS;

}

标签:okhttp3,android,json,okhttp

来源: https://codeday.me/bug/20190929/1833390.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值