【发布时间】:2021-11-17 03:22:57
【问题描述】:
我正在尝试使用带有以下代码的改造将图像上传到端点,在其中我将每个字符串转换为 RequestBody。
private void createNovedad(String IdUnidad,String Serial,String Unidad, List<String> Foto, String Tipo,String CodigoReferencia,String NombrePuntoReferencia,String Quienregistro,String Novedad, String UsuarioAdmin,String Longitude,String Latitude){
RequestBody IdUnidadbody = RequestBody.create(MediaType.parse("text/plain"),IdUnidad );
RequestBody Serialbody = RequestBody.create(MediaType.parse("text/plain"),Serial);
RequestBody Unidadbody = RequestBody.create(MediaType.parse("text/plain"),Unidad );
File file = new File(Uri.parse(Foto.get(0)).getPath());
RequestBody FotoBody = RequestBody.create(MediaType.parse("image/*"), file);
RequestBody Tipobody = RequestBody.create(MediaType.parse("text/plain"),Tipo );
RequestBody CodigoReferenciabody = RequestBody.create(MediaType.parse("text/plain"),CodigoReferencia );
RequestBody NombrePuntoReferenciabody = RequestBody.create(MediaType.parse("text/plain"),NombrePuntoReferencia );
RequestBody Quienregistrobbody = RequestBody.create(MediaType.parse("text/plain"),Quienregistro );
RequestBody Novedadbody = RequestBody.create(MediaType.parse("text/plain"),Novedad );
RequestBody UsuarioAdminbody = RequestBody.create(MediaType.parse("text/plain"),UsuarioAdmin );
RequestBody Longitudebody = RequestBody.create(MediaType.parse("text/plain"),Longitude);
RequestBody Latitudebody = RequestBody.create(MediaType.parse("text/plain"),Latitude );
Retrofit retrofit = new Retrofit.Builder().baseUrl(URL_NOVEDAD)
.addConverterFactory(GsonConverterFactory.create())
.build();
JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
Call<Referencia> response = jsonPlaceHolderApi.sendNovedad(IdUnidadbody,Serialbody, Unidadbody, FotoBody,Tipobody,CodigoReferenciabody, NombrePuntoReferenciabody,Quienregistrobbody,Novedadbody, UsuarioAdminbody, Longitudebody, Latitudebody);
response.enqueue(new Callback<Referencia>() {
@Override
public void onResponse(Call<Referencia> call, Response<Referencia> response) {
if (!response.isSuccessful()) {
Toast.makeText(getApplicationContext(), String.valueOf(response.code()), Toast.LENGTH_SHORT).show();
return;
}else{
Toast.makeText(getApplicationContext(), "Novedad creada correctamente", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Referencia> call, Throwable t) {
Toast.makeText(getApplicationContext(), String.valueOf(t), Toast.LENGTH_SHORT).show();
}
});
}
这是我正在使用的模型
@Multipart
@FormUrlEncoded
@POST("create/novreferencia")
Call<Referencia> sendNovedad(@Part("IdUnidad") RequestBody IdUnidad,
@Part("Serial") RequestBody Serial,
@Part("Unidad") RequestBody Unidad,
@Part("Foto\"; filename=\"pp.png\" ") RequestBody Foto,
@Part("Tipo") RequestBody Tipo,
@Part("CodigoReferencia") RequestBody CodigoReferencia,
@Part("NombrePuntoReferencia") RequestBody NombrePuntoReferencia,
@Part("QuienRegistro") RequestBody QuienRegistro,
@Part("Novedad") RequestBody Novedad,
@Part("UsuarioAdmin") RequestBody UsuarioAdmin,
@Part("Latitude") RequestBody Latitude,
@Part("Longitude") RequestBody Longitude);
问题是 logcat 没有显示任何错误,但应用程序停止工作。所有变量都是字符串
【问题讨论】:
-
File file = new File(Uri.parse(Foto.get(0)).getPath())请告诉file.getAbsolutePath()的值,另外加上if(!file.exists()) return;。 -
这是错误 java.lang.IllegalArgumentException: Only one encoding annotation is allowed.
标签: java android android-studio retrofit