Używam wydajnej biblioteki sieciowej do modernizacji, ale nie mogę obsłużyć dynamicznego formatu JSON, który zawiera pojedynczy prefiks, responseMessage
który zmienia się object
losowo, ten sam prefiks ( responseMessage
) zmienia się w niektórych przypadkach (dynamicznie).
Format Json Obiekt odpowiedzi Wiadomość:
{
"applicationType":"1",
"responseMessage":{
"surname":"Jhon",
"forename":" taylor",
"dob":"17081990",
"refNo":"3394909238490F",
"result":"Received"
}
}
responseMessage
Format JSON dynamicznie zmienia się na ciąg typu:
{
"applicationType":"4",
"responseMessage":"Success"
}
Mój problem polega na tym, że ponieważ retrofit ma wbudowane JSON
parsowanie, muszę przypisać pojedyncze POJO na żądanie! ale REST-API jest niestety zbudowane na dynamicznych JSON
odpowiedziach. Prefiks zmieni się losowo z ciągu na obiekt w obu metodach sukcesu (...) i niepowodzenia (...) !
void doTrackRef(Map<String, String> paramsref2) {
RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint("http://192.168.100.44/RestDemo").build();
TrackerRefRequest userref = restAdapter.create(TrackerRefRequest.class);
userref.login(paramsref2,
new Callback<TrackerRefResponse>() {
@Override
public void success(
TrackerRefResponse trackdetailresponse,
Response response) {
Toast.makeText(TrackerActivity.this, "Success",
Toast.LENGTH_SHORT).show();
}
@Override
public void failure(RetrofitError retrofitError) {
Toast.makeText(TrackerActivity.this, "No internet",
Toast.LENGTH_SHORT).show();
}
});
}
Pojo:
public class TrackerRefResponse {
private String applicationType;
private String responseMessage; //String type
//private ResponseMessage responseMessage; //Object of type ResponseMessage
//Setters and Getters
}
W powyższym kodzie POJO TrackerRefResponse.java prefiks responseMessage jest ustawiony na string lub obiekt typu responseMessage, więc możemy stworzyć POJO ze zmienną ref o tej samej nazwie (podstawy java :)), więc szukam tego samego rozwiązania dla dynamiki JSON
w Retrofit. Wiem, że jest to bardzo łatwa praca w przypadku zwykłych klientów http z zadaniem asynchronicznym, ale nie jest to najlepsza praktyka podczas JSON
analizowania REST-Api ! patrząc na wydajność Benchmarki zawsze Volley lub Retrofit to najlepszy wybór, ale nie udało mi się poradzić sobie z dynamiką JSON
!
Możliwe rozwiązanie, które znam
Użyj starego zadania asyc z parsowaniem klienta http. :(
Spróbuj przekonać programistę backendu RESTapi.
Utwórz niestandardowego klienta Retrofit :)