Разглеждах залпа и в общи линии всички примери са подобни на следния от официалния документ:
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
mTxtDisplay.setText("Response: " + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
Така че моето разбиране е, че правим заявка във фонова нишка и Volley се грижи за тези подробности и получаваме отговора в нишката на потребителския интерфейс, когато се извика методът onResponse
, т.е.
@Override
public void onResponse(JSONObject response) {
mTxtDisplay.setText("Response: " + response.toString());
}
Въпросът ми е какво се случва, ако отговорът на JSONObject от сървъра е нетривиален, всъщност доста голям и за да актуализираме потребителския интерфейс, трябва да нанесем напр. Клас GSON, за да получим полетата, от които се нуждаем?
Предполагам, че извършването на преобразуването вътре в onResponse
е грешно нещо, тъй като преобразуването може да отнеме много време и ние ще го направим в нишката на потребителския интерфейс.
Предполагам, че мога да задействам нова нишка в този момент, но получаването на резултатите от тази нова нишка за актуализиране на потребителския интерфейс в нишката на потребителския интерфейс може да стане объркващо.
Вярвам, че това трябва да е стандартен проблем, така че трябва да има стандартно чисто решение/подход.
Какъв е чистият/стандартен подход за това преобразуване?