【问题标题】:Decoding a JSON array解码 JSON 数组
【发布时间】:2019-06-22 09:05:36
【问题描述】:

我有一个数据库,其中有一列名为“items”,我将 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”都是空的,似乎for循环不起作用

JSON 示例: JSON Example

而且我 100% 确定我的数据库已满

【问题讨论】:

    标签: android arrays json android-recyclerview


    【解决方案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 库

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

    它会返回一个你可以使用的对象;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-12
      • 2012-11-12
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多