我无法在这些代码行中找到语义错误的位置:
PuntoGpsRecorridoDTO puntoGpsRecorridoDto = new PuntoGpsRecorridoDTO();
puntoGpsRecorridoDto.setDescripcion(puntoGpsRecorrido.getDescripcion());
puntoGpsRecorridoDto.setIdRecorrido(37);
puntoGpsRecorridoDto.setDemoraSeg(2);
puntoGpsRecorridoDto.setPrecisionMts(10);
puntoGpsRecorridoDto.setEstado(puntoGpsRecorrido.getEstado());
puntoGpsRecorridoDto.setFechaHora(puntoGpsRecorrido.getFechaHora());
puntoGpsRecorridoDto.setIdDispositivo("943953977-OFICINA");
puntoGpsRecorridoDto.setLatitud(puntoGpsRecorrido.getLatitud());
puntoGpsRecorridoDto.setLongitud(puntoGpsRecorrido.getLongitud());
puntoGpsRecorridoDto.setPrecisionMts(puntoGpsRecorrido.getPrecisionMts());
Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonDateDeserializer()).create();
Retrofit retrofit = new Retrofit.Builder().baseUrl(Util.URL_WS).addConverterFactory(GsonConverterFactory.create(gson)).build();
LocationService locationService = retrofit.create(LocationService.class);
Call<EstadoDTO> callEstadoDto = locationService.enviarPuntoGpsRecorrido(puntoGpsRecorridoDto);
Response<EstadoDTO> exec = callEstadoDto.execute();
estadoDto = exec.body(); // <<<------ body() return NULL
改造客户的LocationService接口:
public interface LocationService
{
@POST("recorrido/sending")
Call<EstadoDTO> enviarPuntoGpsRecorrido(@Body PuntoGpsRecorridoDTO puntoGpsRecorridoDto);
}
连接服务? ---&GT; YES,
它以另一种方式运作? - &GT;是的,使用SoapUI测试,
服务器? ---&GT; Apache tomcat + Mysql + Hibernate
PuntoGpsRecorridoDTO类:
public class PuntoGpsRecorridoDTO
{
private Integer idRecorrido;
private String idDispositivo;
private Double latitud;
private Double longitud;
private Boolean estado;
private String descripcion;
private Integer precisionMts;
private Integer demoraSeg;
private Date fechaHora;
public PuntoGpsRecorridoDTO()
{
}
}
PuntoGpsRecorrido类:
@DatabaseTable(tableName = "PuntoGpsRecorrido")
public class PuntoGpsRecorrido
{
@DatabaseField(generatedId = true)
private Integer idRecorrido;
@DatabaseField(foreign = true, canBeNull = false)
private Dispositivo dispositivo;
@DatabaseField
private Double latitud;
@DatabaseField
private Double longitud;
@DatabaseField
private Boolean estado;
@DatabaseField
private String descripcion;
@DatabaseField
private Integer precisionMts;
@DatabaseField
private Integer demoraSeg;
@DatabaseField
private Date fechaHora;
public PuntoGpsRecorrido()
{}
}
EstadoDTO课程:
public class EstadoDTO
{
public static final String EXITO="001";
public static final String ERROR="000";
private String code;
private String msg;
private String extra;
public EstadoDTO()
{}
}
错误:
使用SoapUI进行测试,结果非常好:
我做错了什么?如果您有更多信息,请告诉我 信息需要。提前谢谢。
答案 0 :(得分:0)
使用以下代码,它将处理来自服务器的各种故障,您可能需要升级到最新版本的Retrofit。
致电callEstadoDto = locationService.enviarPuntoGpsRecorrido(puntoGpsRecorridoDto);
callEstadoDto.enqueue(new Callback<EstadoDTO>() {
@Override
public void onResponse(Response<EstadoDTO> response, Retrofit retrofit) {
hideLoader();
if(response.isSuccess()){
//do your thing
}else{
String error=response.errorBody().string();
}
}
@Override
public void onFailure(Throwable t) {
Log.e("error " , ""+t.toString());
}
});
答案 1 :(得分:0)
这是解决方案!
检测到错误:属性中的序列化日期数据类型错误 对象PuntoGpsRecorridoDTO发送POJO Web服务。
Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonDateDeserializer()).create()
;
解决方案:替换为:
Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonDateSerializer()).create();
Aqui las clases:
JsonDateDeserializer类:
public class JsonDateDeserializer implements JsonDeserializer<Date>
{
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
String s = json.getAsJsonPrimitive().getAsString();
long l = Long.parseLong(s); //long l = Long.parseLong(s.substring(6, s.length() - 2));
Date d = new Date(l);
return d;
}
}
JsonDateSerializer类:
public class JsonDateSerializer implements JsonSerializer<Date>
{
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context)
{
long l = src.getTime();
JsonElement json = new JsonPrimitive(l);
return json;
}
}
快乐的节目......