Retrofit 2
一個久聞大名的網路操作框架,基於 OKHTTP3 在包裝,用起來挺舒爽的,之前都是使用 VOLLEY 作為主要工具,各有優缺點,封裝概念不同。對於 Retrofit 上傳檔案不熟,因此僅僅是作筆記。
其實上面就已經足夠充分,而我的需求則是同時在加上 string list 參數上傳
retrofit2 註解封裝
@Multipart
@POST("/poll")
Call createVote(@PartMap Map<String, RequestBody> parametor,
@Part("description") RequestBody description,
@Part MultipartBody.Part file
);
Android client code
public void createVote(VoteData voteSetting, List options, File image
, VoteDataManager.createVoteResponseCallback callback) {
Map<String, RequestBody> parameter = new HashMap<>();
RequestBody title = RequestBody.create(MediaType.parse("text/plain"), voteSetting.getTitle());
RequestBody maxOption = RequestBody.create(MediaType.parse("text/plain"), String.valueOf(voteSetting.getMaxOption()));
RequestBody minOption = RequestBody.create(MediaType.parse("text/plain"), String.valueOf(voteSetting.getMinOption()));
RequestBody userCanAddOption = RequestBody.create(MediaType.parse("text/plain")
, String.valueOf(voteSetting.getIsUserCanAddOption()));
RequestBody userPanPreviewResult = RequestBody.create(MediaType.parse("text/plain")
, String.valueOf(voteSetting.getIsCanPreviewResult()));
RequestBody security = RequestBody.create(MediaType.parse("text/plain")
, VoteData.SECURITY_PUBLIC);
RequestBody category = RequestBody.create(MediaType.parse("text/plain"), String.valueOf(voteSetting.getCategory()));
RequestBody startTime = RequestBody.create(MediaType.parse("text/plain"), String.valueOf(voteSetting.getStartTime()));
RequestBody endTime = RequestBody.create(MediaType.parse("text/plain"), String.valueOf(voteSetting.getEndTime()));
RequestBody rbOption;
// STRING LIST PARAMETOR
for (int i = 0; i < options.size(); i++) {
rbOption = RequestBody.create(MediaType.parse("text/plain"), options.get(i));
parameter.put("pt[" + i + "]", rbOption);
}
parameter.put("t", title);
parameter.put("max", maxOption);
parameter.put("min", minOption);
parameter.put("add", userCanAddOption);
parameter.put("res", userPanPreviewResult);
parameter.put("sec", security);
parameter.put("cat", category);
parameter.put("on", startTime);
parameter.put("off", endTime);
if (voteSetting.getIsNeedPassword()) {
RequestBody password = RequestBody.create(MediaType.parse("text/plain"), voteSetting.password);
parameter.put("p", password);
}
RequestBody requestFile = null;
MultipartBody.Part body = null;
String descriptionString = "vote_image";
RequestBody description = null;
if (image != null) {
requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), image);
body = MultipartBody.Part.createFormData("i", image.getName(), requestFile);
description = RequestBody.create(
MediaType.parse("multipart/form-data"), descriptionString);
}
Call call = voteService.createVote(parameter, description, body);
call.enqueue(callback);
}
雖然上面這樣寫好像很蠢,但一時間也找不到怎某寫,
如果有興趣的人,應該要更加進一步理解 multipart/form-data
最近實在是太忙,文章質量提昇不起來