【问题标题】:JSON array getting last index instead of its sequenceJSON数组获取最后一个索引而不是其序列
【发布时间】:2017-11-10 12:12:23
【问题描述】:

您好,我正在使用json 解析,我收到来自后端的json 响应,并且解析运行良好。但问题是,当我尝试根据响应设置数据时,它只设置最后一个索引。以下是我的 sn-p 代码,json 回复可以请任何人帮助我。

现在它显示输出

(在我的第一个文本视图中)
购买 12 Canex + 1 剂免费
(在我的第二个文本视图中)
购买 12 Canex + 1 剂免费

{
  "Data": {

    "shippingText": "heyy",
    "productOffersList": [
      {
        "bgColorA": "#ffffff",
        "bgColorI": "255*255*255",
        "offerLine": [
          {
            "text": "BUY 6",
            "colorA": "#82d7ff",
            "colorI": "130*215*255"
          },
          {
            "text": " Canex + 1 Dose Free",
            "colorA": "#ff8282",
            "colorI": "255*130*130"
          }
        ]
      },
      {
        "bgColorA": "#ffffff",
        "bgColorI": "255*255*255",
        "offerLine": [
          {
            "text": "BUY 12",
            "colorA": "#65dd63",
            "colorI": "101*221*99"
          },
          {
            "text": " Canex + 1 Dose Free",
            "colorA": "#ff8282",
            "colorI": "255*130*130"
          }
        ]
      }
    ]

  },
  "Status": 1,
  "Message": "",
  "UserMessage": ""
}

代码

JSONArray productOffersList=drawerdatas.getJSONArray("productOffersList");
  for(int k=0;k<productOffersList.length();k++)
                    {

                        JSONObject joofer = productOffersList.getJSONObject(k);
                        JSONArray offerLine=joofer.getJSONArray("offerLine");

                        offertextlist=new ArrayList<ProductOffersModel>();

                        for(int l=0;l<offerLine.length();l++)
                        {
                            JSONObject jooferline = offerLine.getJSONObject(l);
                            ProductOffersModel pom=new ProductOffersModel();
                            pom.setProductOffers_text(jooferline.getString("text"));
                            pom.setProductOffers_colorA(jooferline.getString("colorA"));
                            offertextlist.add(pom);
                        }

                    }

    for(int v=0;v<offertextlist.size();v++)
                {
                    product_view_offertextfirst.setText(offertextlist.get(v).getProductOffers_text()+" "+offertextlist.get(v).getProductOffers_text());
                }  

                   for(int v=0;v<offertextlist.size();v++)
                {
                    product_view_offertexttwo.setText(offertextlist.get(v).getProductOffers_text()+" "+offertextlist.get(v).getProductOffers_text());
                }

【问题讨论】:

  • 请正确格式化您的代码,因为当前版本真的很难阅读

标签: java android arrays json textview


【解决方案1】:

因为您正在执行一个 for 循环来设置您在所有优惠上设置的文本视图的文本,而最后一个是您能够看到的内容

JSONArray productOffersList=drawerdatas.getJSONArray("productOffersList");

offertextlist=new ArrayList<ProductOffersModel>(); 
// You were re creating the list array list inside the for loop so you were losing the data from the 1st product.
for(int k=0;k<productOffersList.length();k++)
{

   JSONObject joofer = productOffersList.getJSONObject(k);
   JSONArray offerLine=joofer.getJSONArray("offerLine");

   for(int l=0;l<offerLine.length();l++)
   {
      JSONObject jooferline = offerLine.getJSONObject(l);
      ProductOffersModel pom=new ProductOffersModel();
      pom.setProductOffers_text(jooferline.getString("text"));
      pom.setProductOffers_colorA(jooferline.getString("colorA"));
      offertextlist.add(pom);
   }

}
if(offertextlist !=null && offertextlist.size()==4)
{
   product_view_offertextfirst.setText(offertextlist.get(0).getProductOffers_text()
                      + " " + offertextlist.get(1).getProductOffers_text());
   product_view_offertexttwo.setText(offertextlist.get(2).getProductOffers_text()
                      + " " + offertextlist.get(3).getProductOffers_text());
}

【讨论】:

  • 先生有什么解决办法?
  • 它显示像这样购买 12 购买 12 Canex + 1 剂免费 Canex + 1 剂免费
  • 我做了一个小改动,如果它按你的意愿工作,那么你必须再次检查你的所有代码
  • 我发布了我的整个代码。根据您的建议,它显示 Buy 12 Canex + 1 Dose Free Buy 12 Canex + 1 Dose Free
  • 哦,是的,我在初始化数组列表时又犯了这么愚蠢的错误。谢谢队友
【解决方案2】:

试试这个解析,

JSONArray productOffersList=drawerdatas.getJSONArray("productOffersList");
for(int k=0;k<productOffersList.length();k++)
                {

                    JSONObject joofer = productOffersList.getJSONObject(k);
                    JSONArray offerLine=joofer.getJSONArray("offerLine");

                    offertextlist=new ArrayList<ProductOffersModel>();
                    ProductOffersModel pom=new ProductOffersModel();

          pom.setProductOffers_text
           (offerLine.getJSONObject(0).getString("text")+""+
           offerLine.getJSONObject(1).getString("text"));

           offertextlist.add(pom);
                  }



    for(int v=0;v<offertextlist.size();v++)
         {

    if(v==0)
       {
       product_view_offertextfirst.setText
       (offertextlist.get(v).getProductOffers_text());
       }
     else if(v==1)   
         {
        product_view_offertexttwo.setText(
        offertextlist.get(v).getProductOffers_text());
      } 
    }

【讨论】:

  • 它显示像这样购买 12 购买 12 Canex + 1 剂免费 Canex + 1 剂免费
  • 您的预期输出应该是什么?
  • 第一个文本视图购买 6 个 Canex + 1 剂免费第二个文本视图购买 12 个 Canex + 1 剂免费
【解决方案3】:

对于大型数据集,不建议手动处理 JSON 数据。您应该使用 JSON 解析库,Gson 可能是一个不错的选择。

https://github.com/google/gson

【讨论】:

    猜你喜欢
    • 2016-02-16
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2016-06-10
    相关资源
    最近更新 更多