我正在开发一款Android应用,通过Retrofit向服务器(rails)发送请求。
我目前的问题是文件上传。在服务器端,我有回形针来处理文件上传。
我似乎无法在一个对象中包含一个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}
正如您所见,&#34;文件&#34;字段是空的,所以我假设上面的错误指的是&#34; file&#34; =&GT; {}而不是二进制文件
到目前为止,我所尝试的并没有奏效,所以我的问题是:
如果您需要其他信息,请询问 谢谢
答案 0 :(得分:1)
创建restAdapter实例时,只需添加此行即可添加转换器 .addConverterFactory(GsonConverterFactory.create()),如下所示
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(RestConnection.BASE_URL_MULTIMEDIA)
.addConverterFactory( GsonConverterFactory.create())
.client(client)
.build();