获取最后一个索引而不是其序列的JSON数组

时间:2017-11-10 12:12:24

标签: java android arrays json textview

您好我正在使用json解析,我从后端获得json响应并且解析运行良好。但问题是,当我尝试按照响应设置数据时,它只设置最后一个索引。以下是我的代码段和json响应,任何人都可以帮助我。

现在它显示输出

(在我的第一篇文字视图中)
购买12 Canex + 1剂量免费
(在我的第二篇文本视图中)
购买12 Canex + 1 Dose Free

{
  "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());
                }

3 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分:0)

尝试使用此解析,

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());
      } 
    }

答案 2 :(得分:-1)

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

https://github.com/google/gson