Не удается получить все значения json в Android с помощью URL

#android #json #arrays #jsonobject

#Android #массивы #json

Вопрос:

Я пытаюсь получить данные json, используя URL-адрес в Android. Мой массив json выглядит следующим образом. Я использовал приведенную ниже кодировку, но проблема в том, что я получаю значение length jarray , равное 1, хотя в массиве больше значений. Во-вторых, я получаю длину newarr , равную 15, но одни и те же значения отображаются 15 раз, т.е. id = 1 отображается 15 раз. Я опубликовал коды, и, поскольку я новичок в json, пожалуйста, расскажите мне шаг за шагом, где я ошибаюсь.

 [
{
    "items": [
        {
            "id": "11",
            "Item_Id": "123",
            "Item_Name": "Chicken Cream Soup",
            "Price": "8",
            "Currency": "AED",
            "Category": "Soup",
            "Description": "Creamy Chicken Soup with garnish amp; side helpings",
            "Unit": "2",
            "food_type": "Non",
            "Image_Large": "/images_large/chickensoup.jpg",
            "Image_Thumb": "/images_large/chickensoup.jpg",
            "Timestamp": "6/23/2014 9:49:43 PM",
            "Promotion": "",
            "Item_Name_arabic": "حساء الطماطم",
            "Item_Name_russian": "",
            "Currency_arabic": "درهم",
            "Currency_russian": "",
            "Description_arabic": "حساء الطماطم",
            "Description_russian": "",
            "Note": "",
            "Nutritional_info": "",
            "extrafield_1": "",
            "extrafield_2": "",
            "preferncess": [
                "No Salt",
                "Extra Sugar"
            ],
            "preferncess_ids": [
                "1",
                "2"
            ],
            "price": [
                "4",
                "5"
            ],
            "preferncess_arabic": [
                "لا الملح",
                "سكر اضافية"
            ]
        },
        {
            "id": "12",
            "Item_Id": "501",
            "Item_Name": "Pasta Napolitan",
            "Price": "18",
            "Currency": "AED",
            "Category": "Pasta",
            "Description": "Pasta in Napolitan Sauce",
            "Unit": "20",
            "food_type": "Non",
            "Image_Large": "/images_large/pasta.jpg",
            "Image_Thumb": "/images_large/pasta.jpg",
            "Timestamp": "6/23/2014 9:47:45 PM",
            "Promotion": "",
            "Item_Name_arabic": "حساء الطماطم",
            "Item_Name_russian": "",
            "Currency_arabic": "درهم",
            "Currency_russian": "",
            "Description_arabic": "حساء الطماطم",
            "Description_russian": "",
            "Note": "",
            "Nutritional_info": "",
            "extrafield_1": "",
            "extrafield_2": "",
            "preferncess": [
                "No Salt"
            ],
            "preferncess_ids": [
                "3"
            ],
            "price": [
                "5"
            ],
            "preferncess_arabic": [
                "لا الملح"
            ]
        },
  //some more values till id=25


  "categories": [
        {
            "categoryName": "Salads",
            "categoryShortName": "Salads",
            "catid": "0",
            "categoryArabicName": "سلطة خضراء"
        },
        {
            "categoryName": "Mezzah",
            "categoryShortName": "Mezzah",
            "catid": "1",
            "categoryArabicName": "المزة"
        },
    //some more values till id=25

   "questions": [
        {
            "q_id": "1",
            "q_question": "How would you rate our Menu ?",
            "q_option1": "Excellent",
            "q_option2": "Very Good",
            "q_option3": "Good",
            "q_option4": "Bad",
            "q_option5": "Terrible",
            "Timestamp": "9/12/2013 3:31:55 PM",
            "q_status": "1"
        },
        {
            "q_id": "2",
            "q_question": "How would you rate our presentation, taste and quality of food ?",
            "q_option1": "Excellent",
            "q_option2": "Very Good",
            "q_option3": "Good",
            "q_option4": "Bad",
            "q_option5": "Terrible",
            "Timestamp": "9/12/2013 3:31:55 PM",
            "q_status": "1"
        },
  //some more values here
  

Код синтаксического анализа Json

   String result = null;
        InputStream is = null;
        try{
                HttpClient httpclient = new DefaultHttpClient();

                HttpPost httppost = new HttpPost("http://166.62.17.208/json_preferencess.aspx");

                HttpResponse response = httpclient.execute(httppost); 

                HttpEntity entity = response.getEntity();
                is = entity.getContent();

                Log.e("log_tag", "connection success " "nameValuePairs");

        }
        catch(Exception e)
        {
                Log.e("log_tag", "Error in http connection " e.toString());


        }

        try
        {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,HTTP.UTF_8),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) 
                {
                        sb.append(line   "n");

                }
                is.close();

                result=sb.toString();
              Log.e("log_tag", "result " result.toString());
        }
        catch(Exception e)
        {
               Log.e("log_tag", "Error converting result " e.toString());


        }

        try
        {
     JSONArray jArray = new JSONArray(result);
            String s="",s1,s2,s3,s4,s5,s6,s7,s8,s9;
            Log.w("Lengh","" jArray.length());
            for(int i=0;i<jArray.length();i  ){
                JSONArray newarr = jArray.getJSONObject(i).getJSONArray("items");
                Log.w("Lengh","" newarr.length());
                for(int j= 0; j<newarr.length();j  ){
                    JSONObject json_data = newarr.getJSONObject(i);
                    s=json_data.getString("id");
                    s1=json_data.getString("Item_Id");
                  Log.i("json display","" s "" s1);
                }
            }




        }
        catch(JSONException e)
        {
                Log.e("log_tag", "Error parsing data " e.toString());

        }
  

Ответ №1:

попробуйте этот способ

 public String postData(String url, List<NameValuePair> nameValuePairs)
        throws Exception {
    // Getting the response handler for handling the post response
    ResponseHandler<String> res = new BasicResponseHandler();
    HttpPost postMethod = new HttpPost(url);

    // Setting the data that is to be sent
    postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    // Execute HTTP Post Request
    String response = httpClient.execute(postMethod, res);
Log.i(TAG , "response :: " response);
    return response;
}
  

Для json.

 rootObject = new JSONObject(postData(url,nameValuesPair));
  

Комментарии:

1. Я пытаюсь получить данные, а не данные post

2. хорошо, тогда скажите мне, что вы получите все данные, напечатанные на экране журнала.

3. проблема в том, что я могу получить первые данные с id = 11. Длина JArray получается равной 1, хотя в нем содержится около 25 значений.