Как да конвертирате json отговор от залп, който е твърде голям, за да бъде направен в нишката на потребителския интерфейс?

Разглеждах залпа и в общи линии всички примери са подобни на следния от официалния документ:

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 е грешно нещо, тъй като преобразуването може да отнеме много време и ние ще го направим в нишката на потребителския интерфейс.
Предполагам, че мога да задействам нова нишка в този момент, но получаването на резултатите от тази нова нишка за актуализиране на потребителския интерфейс в нишката на потребителския интерфейс може да стане объркващо.
Вярвам, че това трябва да е стандартен проблем, така че трябва да има стандартно чисто решение/подход.
Какъв е чистият/стандартен подход за това преобразуване?


person Jim    schedule 15.04.2015    source източник
comment
Можете да използвате AsyncTask за това. Той ви осигурява обратно обаждане за актуализиране на потребителския интерфейс.   -  person dora    schedule 15.04.2015
comment
наистина трябва да извършвате всякакви мрежови повиквания във фонова нишка.   -  person Martin    schedule 15.04.2015


Отговори (1)


Обикновено имам AsyncTack, който анализира JSON асинхронно и го карам да приема персонализиран Interface, който извикващият прилага като параметър, като има метод като:

void onResult(Object dataReturned);

След като dataReturned обектът е създаден асинхронно в AsyncTask, аз просто използвам този параметър на AsyncFunction като обратно извикване към оригиналния повикващ.

mCaller.onResult(data);

Не знам за някакъв стандартен или предварително дефиниран начин за това.

person C0D3LIC1OU5    schedule 15.04.2015
comment
Значи това е нещо отделно от Volley flow? Би ли било възможно да добавите малка извадка към вашия отговор? - person Jim; 15.04.2015