Как добавить объекты в ArrayList

Я не могу добавить объекты в свой ArrayList, который я получаю от конечной точки API. Я пытаюсь сделать JsonArray из JSONObject.

mJsonObjectRequest = new JsonObjectRequest(Request.Method.GET, ENDPOINT, null, new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
        try {
            mJsonArray=response.getJSONArray("articles");
            for(int i=0;i<mJsonArray.length();i++){
                mJsonObject=mJsonArray.getJSONObject(i);
                model = new Model();
                model.setTitle(mJsonObject.getString("title"));
                model.setAuthor(mJsonObject.getString("author"));
                model.setDescription(mJsonObject.getString("description"));

                Toast.makeText(MainActivity.this, "" + model.getTitle(), Toast.LENGTH_SHORT).show(); // returns 0

                mModelList.add(model);
            }
        }
        catch (Exception ex){
            ex.printStackTrace();
        }
    }
};

Не могли бы вы также опубликовать JSON в сообщении? Что получится, если вы зарегистрируете mJsonArray и mJsonObject в коде? Получают ли они данные соответственно от конечной точки API?

SaadAAkash 23.06.2019 07:29

проверьте мой ответ, это намного проще, чем ваш подход

lvl4fi4 23.06.2019 07:42

@ahmedaljubair на самом деле я получаю все данные в try catch, и они будут добавлены в ArrayList, но когда я получаю доступ к данным из списка (вне блока try catch или где-либо в коде), размер по-прежнему возвращает 0, в то время как я объявляю список Array как глобальный Переменная

Mohammad Abid 23.06.2019 08:01
0
3
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать библиотеку Gson, которая сделает всю тяжелую работу за вас.

Например:

это ваш json String:

"[{'Title':'admin','Name':'eddie'},{'Title':'manager','Name':'frank'}]"

и это ваш POJO:

 class Model {
    public String Title;
    public String Name;
}

и используйте его следующим образом:

Gson g = new Gson();
    ArrayList<Model> i = g.fromJson("[{'Title':'title','Name':'name'},{'Title':'title','Name':'name'}]", new ArrayList<Model>().getClass());
    Toast.makeText(this, String.valueOf(i.size()), Toast.LENGTH_SHORT).show();

Вам нужно поймать ответ с помощью object.optString("code"), иначе вам понадобится класс POJO. Я имею в виду решение номер один по вашему мнению

mJsonObjectRequest=new JsonObjectRequest(Request.Method.GET, ENDPOINT, null, 
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
                if (response.isSuccessful() && response.code() == 200) {
                    JSONObject jsonObject = new 
                    JSONObject(response.body().string());
                    JSONArray jsonArray = jsonObject.optJSONArray("data");
                    if (jsonArray.length() > 0) {
                        db.clearData();
                    }
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject object = jsonArray.optJSONObject(i);
                        db.insertConfig(new ConfigModel(object.optInt("id"), object.optString("code"), object.optString("value"), object.optString("createdAt"), object.optString("updatedAt")));
                    }
                }
            } catch (Exception ex) {
                utility.logger(ex.toString());
            }

Рахаман на самом деле я получаю все данные в try catch, и они будут добавлены в ArrayList, но когда я получаю доступ к данным из списка (вне блока try catch или где-либо в коде), размер по-прежнему возвращает 0, в то время как я объявляю список Array как глобальную переменную

Mohammad Abid 23.06.2019 10:00

ты решил свою проблему? Однажды я столкнулся с той же проблемой и обнаружил, что мне нужно перебирать каждый объект и добавлять в ArrayList. Если вы не нашли никакого решения, я могу просмотреть свой код и вставить его сюда.

Muhaiminur Rahman 23.06.2019 11:55

Другие вопросы по теме