java - Retrofit2上傳圖片失敗
問題描述
上傳的時(shí)候報(bào)錯(cuò): onFailure=Use JsonReader.setLenient(true) to accept malformed JSON at line 15 column 1 path $多次修改URL地址和模型都是這個(gè)錯(cuò)誤
這是Retrofit接口代碼···public interface ImageUpload {
//上傳圖片@Multipart@POST('/xxzx/a/tpsb/uploadPicture')Call<UploadResult> uploadMultipleFiles(@PartMap Map<String, RequestBody> files);
}···
Retrofit 調(diào)用代碼···public class ServiceGenerator {
private static final String API_BASE_URL= 'http://114.115.139.232:8080/';private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();private static Retrofit.Builder builder =new Retrofit.Builder().baseUrl(API_BASE_URL).addConverterFactory(GsonConverterFactory.create());public static <S> S createService(Class<S> serviceClass){ Retrofit retrofit = builder.client(httpClient.build()).build(); return retrofit.create(serviceClass);}
}···
以下是調(diào)用方法:··· private void uploadFiles() {
if(imagesList.size()==0){Toast.makeText(MainActivity.this, '沒有選擇圖片', Toast.LENGTH_SHORT).show();return; } Map<String, RequestBody>files = new HashMap<>(); //ImageUpload是interface不是class,所以我們是無法直接調(diào)用該方法,需要用Retrofit創(chuàng)建一個(gè)ImageUpload的代理對(duì)象 final ImageUpload service = ServiceGenerator.createService(ImageUpload.class); for (int i = 0;i<imagesList.size();i++){File file = new File(imagesList.get(i).path);files.put('file' + i + ''; filename='' + file.getName(),RequestBody.create(MediaType.parse(imagesList.get(i).mimeType), file)); } Call<UploadResult> call = service.uploadMultipleFiles(files); call.enqueue(new Callback<UploadResult>() {@Overridepublic void onResponse(Call<UploadResult> call, Response<UploadResult> response) { if (response.isSuccessful()){Toast.makeText(MainActivity.this, '上傳成功', Toast.LENGTH_SHORT).show();Log.i('圖片上傳:','---------------------上傳成功-----------------------'); }}@Overridepublic void onFailure(Call<UploadResult>call, Throwable t) { Log.i('wxl', 'onFailure=' + t.getMessage()); Toast.makeText(MainActivity.this,'上傳失敗', Toast.LENGTH_SHORT).show();} });}
···
這是使用Postman post成功的返回json:{ 'failureList': [], 'successNum': 1, 'failureNum': 0}
這是報(bào)錯(cuò)的內(nèi)容:05-06 16:15:43.599 19961-19961/com.example.yuan.imagerecognitionmanager I/wxl: onFailure=Use JsonReader.setLenient(true) to accept malformed JSON at line 15 column 1 path $
javabean:public class UploadResult<T> {
public int successNum;public int failureNum;public ArrayList<String> failureList;
}
問題解答
回答1:http://stackoverflow.com/ques... 可以參考下這里。
主要是這個(gè)
Gson gson = new GsonBuilder().setLenient().create();Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL).client(client).addConverterFactory(GsonConverterFactory.create(gson)).build();
相關(guān)文章:
1. javascript - avalon使用:duplex設(shè)置select默認(rèn)option的bug2. css3 - 純css實(shí)現(xiàn)點(diǎn)擊特效3. html5 - 請(qǐng)問現(xiàn)在主流的前端自動(dòng)化構(gòu)建工具是哪個(gè)?4. javascript - 有適合開發(fā)手機(jī)端Html5網(wǎng)頁(yè)小游戲的前端框架嗎?5. javascript - 關(guān)于apply()與call()的問題6. java中返回一個(gè)對(duì)象,和輸出對(duì)像的值,意義在哪兒7. java - 在用戶不登錄的情況下,用戶如何添加保存到購(gòu)物車?8. 安全性測(cè)試 - nodejs中如何防m(xù)ySQL注入9. javascript - axios請(qǐng)求回來的數(shù)據(jù)組件無法進(jìn)行綁定渲染10. javascript - jQuery post()方法,里面的請(qǐng)求串可以轉(zhuǎn)換為GBK編碼么?可以的話怎樣轉(zhuǎn)換?
