Декодирование массива JSON

у меня есть база данных со столбцом с именем «элементы», я поместил свой JsonString в этот столбец. я хочу получить данные из массива в цикле for, но он не дает мне данные вот мой код:

dbConnector = new DbConnector(getContext(),null,null,1);

        Cursor c = dbConnector.get().rawQuery("SELECT * FROM factors",null);

        while (c.moveToNext()){
            String name = c.getString(c.getColumnIndex("name"));
            String items = c.getString(c.getColumnIndex("items"));
            String itemsEncoded = null;
            int priceEncoded = 0;
            int amount = 0;
            try {
                JSONArray mJsonArray = new JSONArray(items);
                JSONObject mJsonObject;
                Log.e("JSON ARRAY",mJsonArray.length() + "");
                for (int i = 0; i < mJsonArray.length(); i++) {
                    mJsonObject = mJsonArray.getJSONObject(i);
                    mJsonObject.getString("product_id");
                    priceEncoded += Integer.parseInt(mJsonObject.getString("price"));
                    amount       += Integer.parseInt(mJsonObject.getString("number"));
                    itemsEncoded += mJsonObject.getString("product_name") + " - " + mJsonObject.getString("price") + " ????? " + " - " + mJsonObject.getString("number")+ " ???" + "\n";
                }
            }catch (JSONException e){
                Log.e("ERROR",e.getMessage());
            }

            list.add(new FactorObject(name,priceEncoded + "",amount,itemsEncoded));
        }


        recyclerView = view.findViewById(R.id.factorRecycler);
        adapter = new FactorsAdapter(getContext(),list);

        recyclerView.setAdapter(adapter);

        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

переменные «priceEncoded», «amount», «itemsEncoded» имеют значение null, и кажется, что цикл for не работает

Пример JSON: Пример JSON

а также я на 100% уверен, что моя база данных заполнена

0
0
272
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ваш JSON не содержит «product_id», и mJsonObject будет нулевым. лучше использовать класс модели для декодирования JSON, создать класс с вашими полями JSON

class JsonModelVM{
private String product_name,buyer_name;
private int number;
private double price;
  public void setProduct_name(String product_name) {
    this.product_name = product_name;
   }

public String getBuyer_name() {
    return buyer_name;
   }

public void setBuyer_name(String buyer_name) {
    this.buyer_name = buyer_name;
   }

public int getNumber() {
    return number;
   }

public void setNumber(int number) {
    this.number = number;
   }

public double getPrice() {
    return price;
   }

public void setPrice(double price) {
    this.price = price;
   }
}

и в классе декодирования используйте Gson libray

implementation 'com.google.code.gson:gson:2.8.2'
.
. 
.
JsonModelVM object = new Gson().fromJson(mJsonArray.getJSONObject(i).toString(), 
AppCourseVM.class);

и он вернет объект, который вы можете использовать;)

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