Ich denke, das ist schlechte API-Antwort und sollte aus dem Backend behoben werden. Wenn Sie jedoch das Problem lösen möchten, müssen Sie die Antwort auf String mit dem String-Konverter deserialisieren. Sie können es nicht mit einem Gson-Konverter zu Ihrem Pojo deserialisieren.
StringConverter.java
public class StringConverter implements Converter {
@Override
public Object fromBody(TypedInput typedInput, Type type) throws ConversionException {
String text = null;
try {
text = fromStream(typedInput.in());
} catch (IOException ignored) { }
return text;
}
@Override
public TypedOutput toBody(Object o) {
return null;
}
public static String fromStream(InputStream in) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder out = new StringBuilder();
String newLine = System.getProperty("line.separator");
String line;
while ((line = reader.readLine()) != null) {
out.append(line);
out.append(newLine);
}
return out.toString();
}
}
API-Aufruf Implementierung
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(API_URL)
.setConverter(new StringConverter())
.build();
YourAPI api = restAdapter.create(YourAPI.class);
api.yourService(parameter,new RestCallback<String>() {
@Override
public void success(String response, Response retrofitResponse) {
super.success(response, retrofitResponse);
//process your response here
//convert it from string to your POJO, JSON Object, or JSONArray manually
}
@Override
public void failure(RetrofitError error) {
super.failure(error);
}
});
kein Java-Experte, aber ich denke, man nicht zwei Felder mit dem gleichen Namen in einer Klasse haben kann. Man sollte zumindest "Detail" und die anderen "Details" sein. –
Verwenden Sie dieses Online-Tool, hoffe, dass es Ihnen hilft .. http://pojo.sodhanalibrary.com/ –
Ich denke, Sie können eine benutzerdefinierte Deserializer wie dieser Typ schreiben: http://StackOverflow.com/Questions/35502079/custom- Konverter-für-Retrofit-2 – nasch