Почему не добавляется элемент ArrayList внутри блока try?
Имеется следующий метод для парсинга json:
public void jsonParse() {
String url = "https://raw.githubusercontent.com/wesleywerner/ancient-tech/02decf875616dd9692b31658d92e64a20d99f816/src/data/techs.ruleset.json";
contentClassArrayList.add(new ContentClass("why")); // добавление элемента ArrayList для RecyclerView вне try - работает
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
for (int i = 0; i < response.length(); i++) {
JSONObject obj = response.getJSONObject(i);
String flags = obj.optString("flags");
String graphic = obj.optString("graphic");
String graphic_alt = obj.optString("graphic_alt");
String helptext = obj.optString("helptext");
String name = obj.optString("name");
String req1 = obj.optString("req1");
String req2 = obj.optString("req2");
contentClassArrayList.add(new ContentClass("why")); // добавление элемента ArrayList для RecyclerView внутри try - не работает
mtw.append(graphic+" "+name+" "+helptext); // добавление текста в TextView - работает
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
Использую ArrayList объектов класса как параметр для конструктора адаптера RecyclerView. В коде в виде комментариев помечено что выполняется, а что нет.
Ред. 1: При добавлении текста в TextView следующим образом данные из ArrayList получить можно:
mtw.append(contentClassArrayList.get(i).getReq2());
Однако в другом методе получить данные не получается, несмотря на то, что ArrayList объявлен в классе.
Ответы (1 шт):
Наконец, понял в чем причина. Увидев, как элементы TextView появляются у меня на глазах, я осознал, что они заполняются в процессе получения данных с парсера (метод onResponse), а RecyclerView создается еще до этого момента. Поэтому данные в ArrayList как бы есть, но до уже созданного RecyclerView они не доходят. Решением оказалось занесение установщика адаптера RecyclerView в метод onResponse после try-catch.