5

私はいくつかの答えを調べましたが、なぜ私のものが正確に失敗しているのかわかりません...

コードは次のようになります

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        String json = EntityUtils.toString(httpEntity);

        //Convert to JsonArray
        JSONArray jsonArray = new JSONArray(json);

        Log.i(DEBUG_TAG, Integer.toString(jsonArray.length()));

        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            Log.i(DEBUG_TAG, jsonObject.getString(KEY_ID));

            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            // adding each child node to HashMap key => value
            map.put(KEY_ID, jsonObject.getString(KEY_ID));
            map.put(KEY_TITLE, jsonObject.getString(KEY_TITLE));
            map.put(KEY_ARTIST, jsonObject.getString(KEY_ARTIST));
            map.put(KEY_DURATION, jsonObject.getString(KEY_DURATION));
            map.put(KEY_VOTECOUNT, jsonObject.getString(KEY_VOTECOUNT));
            map.put(KEY_THUMB_URL, jsonObject.getString(KEY_THUMB_URL));
            map.put(KEY_GENRE, jsonObject.getString(KEY_GENRE));

            //Adding map to ArrayList
            if (Integer.parseInt(jsonObject.getString(KEY_VOTECOUNT)) == -1){
                //If VoteCount is -1 then add to header
                headerList.add(map);
            }else {
                songsList.add(map);
            }
        }

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

String jsonでlogcatを実行すると、次のような正しい情報が表示されるようです...

  {
"userdata": [
    {
        "id": "8",
        "title": "Baby One More Time",
        "artist": "Britney Spears",
        "duration": "03:24:00",
        "votes": "0",
        "thumb_url": "http://api.androidhive.info/music/images/dido.png",
        "genre": null
    },
    {
        "id": "2",
        "title": "As Long As You Love Me",
        "artist": "Justin Bieber",
        "duration": "05:26:00",
        "votes": "0",
        "thumb_url": "http://api.androidhive.info/music/images/enrique.png",
        "genre": "Rock"
    }
]
}

とlogcat

JSONArray jsonArray = new JSONArray(json);

jsonArray.length()

10-31 22:57:28.433:W / CustomizedListView(26945):エラー!無効なインデックス0、サイズは0です

私にお知らせください

ありがとうございました、

4

4 に答える 4

2

問題は、JSON配列ではないことです。これはJSONオブジェクトであり、JSON配列は[で始まり]で終わります。

ここに画像の説明を入力してください

JSONオブジェクトは{で始まり、}で終わります

ここに画像の説明を入力してください

詳細については、ここで確認できます-> http://www.json.org/

これを修正するには、最初にjson文字列をjsonオブジェクトに変換してから、jsonオブジェクトを解析してjson配列を取得する必要があります

これは、jsonobjectからjson配列を解析する例です。

void ParseAPIWithJSON()
    {
     String readGooglePlace = readGooglePlaceAPI();
     try
     {

      InputStream is = new ByteArrayInputStream(readTwitterFeed.getBytes("UTF-8"));
      byte [] buffer = new byte[is.available()];
      while (is.read(buffer) != -1);
      String jsontext = new String(buffer);
      JSONObject entries = new JSONObject(jsontext);

      JSONArray hasil = entries.getJSONArray("results");
      results = hasil.getString(o);
      Log.i("TAG", results);
      int i;
      Log.i("TAG", Integer.toString(hasil.length()));
      numberofPlaces = hasil.length();
      for (i=0;i<hasil.length();i++)
      {
       JSONObject data = hasil.getJSONObject(i);
       namePlaces[i] = data.getString("name");
       Log.i("TAG", namePlaces[i]);
       JSONObject geometry = data.getJSONObject("geometry");
       JSONObject location = geometry.getJSONObject("location");
       latPlaces[i] = location.getDouble("lat");
       longPlaces[i] = location.getDouble("lng");
       Log.i("TAG", "Lat : "+latPlaces[i]+" Long : "+longPlaces[i]);
         }

     }
     catch (Exception je)
     {
      Log.e("TEST1", je.getMessage());
     }
    }

そのコード全体から、私はあなたがこれを理解する必要があるだけだと思います

 String jsontext = new String(buffer);
 JSONObject entries = new JSONObject(jsontext);
 JSONArray hasil = entries.getJSONArray("results");

文字列を変換->jsonobject->jsonarray->valueを取得

于 2012-11-01T03:09:12.277 に答える
0

交換する必要があります:

JSONArray jsonArray = new JSONArray(json);

JSONArray jsonArray = new JSONObject(json).getJSONArray("userdata");
于 2012-11-01T03:28:46.323 に答える
0

あなたの場合、JSONはjsonArrayではなくjsonobjectから開始しているため、最初にjsonarrayではなくjsonobjectを宣言します。

 try {

        JSONObject jsonObject = new JSONObject();
        JSONArray jsonArray = jsonObject.getJSONArray("userdata");


        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonUserdata = jsonArray.getJSONObject(i);


            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            // adding each child node to HashMap key => value
            map.put(KEY_ID, jsonUserdata.getString(KEY_ID));
            map.put(KEY_TITLE, jsonUserdata.getString(KEY_TITLE));
            map.put(KEY_ARTIST, jsonUserdata.getString(KEY_ARTIST));
            map.put(KEY_DURATION, jsonUserdata.getString(KEY_DURATION));
            map.put(KEY_VOTECOUNT, jsonUserdata.getString(KEY_VOTECOUNT));
            map.put(KEY_THUMB_URL, jsonUserdata.getString(KEY_THUMB_URL));
            map.put(KEY_GENRE, jsonUserdata.getString(KEY_GENRE));


        }

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

詳細については、リンクを参照してください。

http://www.androidhive.info/2012/01/android-json-parsing-tutorial/

于 2012-11-01T04:27:30.747 に答える
0

これを試して。

            HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(url);
    String response_string;

    try {
        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

        HttpEntity httpEntity = response.getEntity();

        InputStream is = httpEntity.getContent();
        InputStreamReader isr = new InputStreamReader(is);

        char[] arr = new char[8*1024]; // 8K at a time
        StringBuffer buf = new StringBuffer();;
        int numChars;


        while ((numChars = isr.read(arr,0,arr.length))>0)
        {
            buf.append(arr,0,numChars);
        }

        response_string = buf.toString();

    } 
    catch (ClientProtocolException e) 
    {
        response_string = "Network Error : " + e.getMessage();
        e.printStackTrace();
    } 
    catch (IOException e) 
    {
        response_string = "Network Error : " + e.getMessage();
        e.printStackTrace();
    }
    catch(Exception e)
    {
        response_string = "Network Error : " + e.getMessage();
        e.printStackTrace();
    }

 JSONArray jsonArray = new JSONArray(response_string);
于 2012-11-01T04:57:57.813 に答える