gpt4 book ai didi

java - Retrofit2上传失败

转载 作者:行者123 更新时间:2023-12-02 13:15:13 25 4
gpt4 key购买 nike

上传错误:使用 JsonReader.setLenient(true) 接受第 15 行第 1 列路径 $在此处输入代码

处格式错误的 JSON

我想上传一些图像,但出现错误:使用 JsonReader.setLenient(true) 接受第 15 行第 1 列路径处格式错误的 JSON。我多次重写 URl 并重写 JavaBean,但出现错误。

该Retrofit2界面:

public interface ImageUpload {

@Multipart
@POST("/xxzx/a/tpsb/uploadPicture")
Call<UploadResult> uploadMultipleFiles(
@PartMap Map<String, RequestBody> files
);

初始化Retrofit2:

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);
}

调用 Retrofit2:

    private void uploadFiles() {

if(imagesList.size()==0){
Toast.makeText(MainActivity.this, "nothing", Toast.LENGTH_SHORT).show();
return;
}
Map<String, RequestBody>files = new HashMap<>();
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>() {
@Override
public void onResponse(Call<UploadResult> call, Response<UploadResult> response) {
if (response.isSuccessful()){
Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
}
}

@Override
public void onFailure(Call<UploadResult>call, Throwable t) {
Log.i("wxl", "onFailure=" + t.getMessage());
Toast.makeText(MainActivity.this,"error", Toast.LENGTH_SHORT).show();
}
});
}

他使用了Postman帖子:

{
"failureList": [],
"successNum": 1,
"failureNum": 0
}

javabean:

public class UploadResult<T> { 
public int successNum;
public int failureNum;
public ArrayList<String> failureList;
}

最佳答案

这使用 postman 帖子。但是我不确定你是如何通过 postman 上传图像的,我可能不知道。但是您需要记录实际出现在 Android 日志中的数据

使用Http拦截器来记录:

  HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

这是因为您可能从改造客户端的请求中获取了不同的数据,这可能导致数据序列化失败。

休息一下,一切似乎都很好。

注意:不要在 API 接口(interface)中使用“/”,因为您已经添加到基本 URL 的末尾

关于java - Retrofit2上传失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43818987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com