Я не могу добавить объекты в свой 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();
}
}
};
проверьте мой ответ, это намного проще, чем ваш подход
@ahmedaljubair на самом деле я получаю все данные в try catch, и они будут добавлены в ArrayList, но когда я получаю доступ к данным из списка (вне блока try catch или где-либо в коде), размер по-прежнему возвращает 0, в то время как я объявляю список Array как глобальный Переменная
Вы можете использовать библиотеку 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 как глобальную переменную
ты решил свою проблему? Однажды я столкнулся с той же проблемой и обнаружил, что мне нужно перебирать каждый объект и добавлять в ArrayList. Если вы не нашли никакого решения, я могу просмотреть свой код и вставить его сюда.
Не могли бы вы также опубликовать JSON в сообщении? Что получится, если вы зарегистрируете
mJsonArrayиmJsonObjectв коде? Получают ли они данные соответственно от конечной точки API?