Я изучал залп, и в основном все примеры похожи на следующий из официального документа< /а>:
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
является неправильным, поскольку преобразование может занять много времени, и мы будем делать это в потоке пользовательского интерфейса.
Думаю, я мог бы запустить новый поток в этот момент, но получение результатов из этого нового потока для обновления пользовательского интерфейса в потоке пользовательского интерфейса может привести к путанице.
Я считаю, что это должна быть стандартная проблема, поэтому должно быть стандартное чистое решение/подход.
Каков чистый/стандартный подход для этого преобразования?