gpt4 book ai didi

android - 在 Android 上使用 Retrofit 对象内部的 TypedFile

转载 作者:行者123 更新时间:2023-11-29 01:35:46 25 4
gpt4 key购买 nike

我正在开发一个通过 Retrofit 向服务器 (rails) 发送请求的 Android 应用。

我当前的问题是文件上传。在服务器端,我有回形针来处理文件上传。

我似乎无法在我想作为参数发送的对象中包含一个 TypedFile这是我调用的 api 方法及其参数

@Multipart
@POST("/containers/{id}/items")
void addItem(@Path("id") int id,
@Part("item")NewItemData newItemData,
Callback<String> callback);

基本上我想发布这个对象(包含一个TypedFile)

public class NewItemData{
String original_filename;
String content_type;
TypedFile file;
String description;
String location;
int container_id;
...
}

编辑:我忘了告诉你我是如何创建对象的

public NewItemData(Context context, String file_path){
String mime_type = FileUtilities.getMimeType(file_path);
String[] file_name_parts = file_path.split("/");
String file_name = file_name_parts[file_name_parts.length-1];
this.original_filename = file_name;
this.full_file_path = file_path;
this.content_type = mime_type;
File file_tmp = new File(file_path);
this.file = new TypedFile("application/octet-stream", file_tmp);
this.description = "";
this.location = "";
}

结束编辑

这是我遇到的错误:

retrofit.RetrofitError: retrofit.converter.ConversionException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1 column 2

这是对象NewItemData转换成json

{"original_filename":"IMG_20150121_221732.jpg","content_type":"image/jpeg","description":"","file":{},"location":"","container_id":0}

如您所见,"file"字段为空,所以我假设上面的错误是指"file"=> {} 而不是二进制文件这一事实

到目前为止我尝试的方法没有奏效,所以我的问题是:

  • 是否可以在多部分模式下发布“包装器”对象?
  • 如果是这样,我应该在什么地方写什么注释?
  • 我应该实现自定义序列化程序吗?

如果您需要更多信息,请询问谢谢

最佳答案

当您创建 restAdapter 实例时,只需添加此行即可添加转换器 .addConverterFactory( GsonConverterFactory.create()) 如下所示

Retrofit retrofit = new Retrofit.Builder()
.baseUrl(RestConnection.BASE_URL_MULTIMEDIA)
.addConverterFactory( GsonConverterFactory.create())
.client(client)
.build();

关于android - 在 Android 上使用 Retrofit 对象内部的 TypedFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28176588/

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