1

Это мой JSonArrayИтерация через ответ JSonArray из URL с помощью андроида залп

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

Первый цикл работает нормально, но второй forloop не .. я не получаю ничего, если я пытаюсь выполнить эти утверждения печати во втором цикле. Пожалуйста, помогите мне !!

+0

В вашем ответе у детей есть только один элемент, размер детей равен 1, вот почему он итерирует только onse .. –

+0

Я сделал отдельный объект: JSONArray childrenProducts = jsono.getJSONArray ("products"); это второй массив, это странно, что этот код работает nt. –

+0

Какое значение вы получаете для childrenProducts.length() ?? –

ответ

1

Почему вы не используете 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); 

Простой!

+0

Если он сначала печатает данные по крайней мере, тогда я могу продолжить то, что вы сказали, но это не печать данных вообще. –

+0

У вас есть строка json? Вы можете пойти с этой процедурой в любом случае. Может возникнуть проблема с вашим циклом или синтаксическим разбором. Пусть GSON сделает синтаксический анализ для вас. Вы просто получите значения из класса «mResponse», а затем попробуйте их распечатать. Его простой в использовании, и я почти написал полный код для вас. –

1

Это не происходит в вашем втором цикле, потому что в вашем первом цикле есть SomeException.

Ваше исполнение будет выброшено в любое предложение catch(), и дальнейшее выполнение не будет выполнено, включая ваш второй цикл.

Просто попробуйте положить, что вот так:

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") + "<----"); 
    } 
+0

он не работал, даже когда у продавца была ценность, но я думаю, что это возможно из-за какого-то исключения –

+0

точно .. Это будет работать, если вы не ставите две попытки .. поймать .. !! –

+0

Я отредактировал это правильно .. !! Это была настоящая проблема .. примите ее, если она объяснит ту же проблему .. !! –

0

Это, как я ее решил:

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

просто пришлось взять два отдельных блока попробовать ... может кто-то пожалуйста, сообщите почему он не работает в одном блоке try? приведенный выше код работает

+0

см. Мой ответ .. http://stackoverflow.com/a/37344516/6127411 –

Смежные вопросы