簡體   English   中英

使用Android Volley從URL遍歷JSonArray響應

[英]Iterating through JSonArray response from url using android volley

這是我的JSonArray

{  
   "vendor":[  
      {  
         "vendor_name":"Tapan Moharana",
         "vendor_description":"",
         "vendor_slug":"tapan",
         "vendor_logo":null,
         "contact_number":null
      }
   ],
   "products":[  
      {  
         "name":"Massage",
         "price":"5000.0000",
         "image":"http:\/\/carrottech.com\/lcart\/media\/catalog\/product\/cache\/1\/image\/150x\/9df78eab33525d08d6e5fb8d27136e95\/2\/9\/29660571-beauty-spa-woman-portrait-beautiful-girl-touching-her-face.jpg"
      },
      {  
         "name":"Chicken Chilly",
         "price":"234.0000",
         "image":"http:\/\/carrottech.com\/lcart\/media\/catalog\/product\/cache\/1\/image\/150x\/9df78eab33525d08d6e5fb8d27136e95\/c\/h\/cheicken.jpg"
      },
      {  
         "name":"Chicken Biryani",
         "price":"500.0000",
         "image":"http:\/\/carrottech.com\/lcart\/media\/catalog\/product\/cache\/1\/image\/150x\/9df78eab33525d08d6e5fb8d27136e95\/placeholder\/default\/image_1.jpg"
      }
   ]
}

這是我的Java代碼:

    JSONObject jsono = new JSONObject(response);
    JSONArray children = jsono.getJSONArray("vendor");
    JSONArray childrenProducts = jsono.getJSONArray("products");
    for (int i = 0; i <children.length(); i++) {
        JSONObject jsonData = children.getJSONObject(i);
        System.out.print(jsonData.getString("vendor_name") + "<----");
        //  String vendorThumbNailURL=jsonData.getString("")
        //jvendorImageURL.setImageUrl(local, mImageLoader);
        vendorLogo=vendorLogo+jsonData.getString("vendor_logo").trim();
        jvendorImageURL.setImageUrl(vendorLogo, mImageLoader);
        jvendorName.setText(jsonData.getString("vendor_name"));
        jvendorAbout.setText(jsonData.getString("vendor_description"));
        jvendorContact.setText(jsonData.getString("contact_number"));
        System.out.print(jsonData.getString("products") + "<----");
    }
    for(int i=0;i<childrenProducts.length();i++){
        JSONObject jsonData = childrenProducts.getJSONObject(i);
        System.out.println("inside products");
        System.out.print(jsonData.getString("name") + "<----dd");
    }

第一個for循環工作正常,但第二個forloop則工作不正常。如果我嘗試在第二個for循環內執行這些打印語句,我什么也沒得到。

為什么不使用Gson來簡單地解析JSON字符串?

您需要先聲明類,以匹配JSON響應,如下所示。

public class Vendor {

    private String vendor_name;
    private String vendor_description;
    private String vendor_slug;
    private String vendor_logo;
    private String contact_number;

    public Vendor() {
    }

    public String getVendor_name() {
        return vendor_name;
    }

    public String getVendor_description() {
        return vendor_description;
    }

    public String getVendor_slug() {
        return vendor_slug;
    }

    public String getVendor_logo() {
        return vendor_logo;
    }

    public String getContact_number() {
        return contact_number;
    }
}

...

public class Product {

    private String name;
    private String price;
    private String image;

    public Product() {
    }

    public String getName() {
        return name;
    }

    public String getPrice() {
        return price;
    }

    public String getImage() {
        return image;
    }
}

現在像這樣聲明Response

public class Response {

    private List<Vendor> vendor;
    private List<Product> products;

    public Response() {
    }

    public List<Vendor> getVendor() {
        return vendor;
    }

    public List<Product> getProducts() {
        return products;
    }
}

現在,一旦有了JSON字符串,就可以像這樣使用GSON輕松將數據反彈到Response類中。

Gson gson = new Gson();
Response mResponse = gson.fromJson(jsonString, Response.class);

簡單!

它不在您的第二個for循環中進行,因為您的第一個for循環中存在SomeException

您的執行將被拋出到任何catch()子句中,並且進一步的執行將不會完成,包括您的第二個for循環。

只需嘗試像這樣放置:

    JSONObject jsono = new JSONObject(response);
    JSONArray children = jsono.getJSONArray("vendor");
    JSONArray childrenProducts = jsono.getJSONArray("products");

    //this will be executed now..!!

    for(int i=0;i<childrenProducts.length();i++){
        JSONObject jsonData = childrenProducts.getJSONObject(i);
        System.out.println("inside products");
        System.out.print(jsonData.getString("name") + "<----dd");
    }

    for (int i = 0; i <children.length(); i++) {
        JSONObject jsonData = children.getJSONObject(i);
        System.out.print(jsonData.getString("vendor_name") + "<----");
        //  String vendorThumbNailURL=jsonData.getString("")
        //jvendorImageURL.setImageUrl(local, mImageLoader);
        vendorLogo=vendorLogo+jsonData.getString("vendor_logo").trim();
        jvendorImageURL.setImageUrl(vendorLogo, mImageLoader);
        jvendorName.setText(jsonData.getString("vendor_name"));
        jvendorAbout.setText(jsonData.getString("vendor_description"));
        jvendorContact.setText(jsonData.getString("contact_number"));
        System.out.print(jsonData.getString("products") + "<----");
    }

這就是我解決的方法:

   try {
                    JSONObject jsono = new JSONObject(response);
                    JSONArray children = jsono.getJSONArray("vendor");
                    for (int i = 0; i <children.length(); i++) {
                        JSONObject jsonData = children.getJSONObject(i);
                        System.out.print(jsonData.getString("vendor_name") + "<----");
                      //  String vendorThumbNailURL=jsonData.getString("")
                        //jvendorImageURL.setImageUrl(local, mImageLoader);
                        vendorLogo=vendorLogo+jsonData.getString("vendor_logo").trim();
                        jvendorImageURL.setImageUrl(vendorLogo, mImageLoader);
                        jvendorName.setText(jsonData.getString("vendor_name"));
                        jvendorAbout.setText(jsonData.getString("vendor_description"));
                        jvendorContact.setText(jsonData.getString("contact_number"));
                        System.out.print(jsonData.getString("products") + "<----");
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }

                try {
                    JSONObject jsono = new JSONObject(response);
                    JSONArray childrenProducts = jsono.getJSONArray("products");
                    System.out.println(childrenProducts.length()+"LENGTH");
                    for(int i=0; i<childrenProducts.length(); i++){
                        JSONObject jsonData1 = childrenProducts.getJSONObject(i);
                        System.out.println(childrenProducts.length() + "LENGTH");
                        System.out.print(jsonData1.getString("name") + "<----dd");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

只是必須采取兩個單獨的嘗試塊...有人可以告訴我為什么它在一個嘗試塊中不起作用嗎? 上面的代碼有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM