2012-04-05 18 views
-1

サーバーに接続してjsonデータを取得できます。それがこの形式である:私は "strServerResponseMsg" 変数で私にresponsed JSONを持ってAndroid、JSONの解析中キャッチエラー

@Override 
    protected void onStart() { 
     super.onStart(); 
     Log.i("NewsList", "inside onStart();"); 

     try { 
      URL url = new URL("/MY URL/"); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setConnectTimeout(Manager.ConnTimeout); 
      conn.setReadTimeout(Manager.ReadTimeout); 

      int responseCode = conn.getResponseCode(); 
      Log.i("Connection oppened", "Response code is:" + responseCode); 
      if (responseCode == HttpURLConnection.HTTP_OK) { 
       BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
       if (in != null) { 
        StringBuilder strBuilder = new StringBuilder(); 
        // Read character by character    
        int ch = 0; 
        while ((ch = in.read()) != -1) 
         strBuilder.append((char) ch); 

        // get returned message and show it 
        strServerResponseMsg = strBuilder.toString(); 
        Log.i("Data returned by server:", strServerResponseMsg); 



        JSONArray jObjects = new JSONArray(strServerResponseMsg); 
        for(int i=0; i<jObjects.length(); i++){ 
         System.out.println(jObjects.getJSONObject(i).getString("contestantId").toString()); 
         System.out.println(jObjects.getJSONObject(i).getString("contestantName").toString()); 
         System.out.println(jObjects.getJSONObject(i).getString("photoUrl").toString()); 
       } 
       in.close(); 
      } 

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


    } 

{"clazz":"ManiaContestantList","contestants":[ 

    {"clazz":"ManiaContestant","contestantId":"1","contestantName":"Adira","photoUrl":"/fileFeed.action?service=astroManiaService&action=viewFile&type=JPG&path=1/1_CONTESTANT_PHOTO.png"}, 
    {"clazz":"ManiaContestant","contestantId":"2","contestantName":"Akim","photoUrl":"/fileFeed.action?service=astroManiaService&action=viewFile&type=JPG&path=2/2_CONTESTANT_PHOTO.png"}, 
. 
. 
. 
    ]} 

私のコードは次のようです。ライン "JSONArray jObjects = new JSONArray(strServerResponseMsg);" Logcatはtypemismatchエラーを示しています。

私の問題は何ですか?

答えて

4

{それがオブジェクトである意味を繰り返す必要がありますので、それはjsonobjectあるjsonarrayではありません。 [は配列であることを示します。あなたの文字列は{で始まるので、JSONArrayではなくJSONObjectです。

JSONArray jObjects = new JSONArray(strServerResponseMsg); 

は '{' で明らかなように、あなたが取得しているJSONObjectあるこの

JSONObject jObjects = new JSONObject(strServerResponseMsg); 
+0

ありがとうございました。私はそれを行い、配列を変更しました:JSONArray contestantObjects =新しいJSONArray((Collection)jObject.getJSONArray( "contestants"));走った後にクラッシュが起こった。あなたは何か考えていますか? – Hesam

+0

JSONArrayを試すcontestantObjects = jObject.getJSONArray( "contestants");アクセスのための はhttp://stackoverflow.com/questions/1568762/jsonarray-with-javaを参照してください –

1

与えられたJSONの例では、あなたがそう、次

JSONObject jObj = new JSONObject(strServerResponseMsg); 
JSONArray jArray = new JSONArray(jObj.getJSONArray("contestants")); 

とのようなものがjArray

を通じて
0

のようにする必要があります。

JSONObject j=null; 

    try{ 
j=new JSONObject(strServerResponseMsg); 
} 
catch(JSONException r) 
{ 
    //Handle it. 
    r.printStackTrace(); 


} 
Log.w("json",j.toString()); 
0

JSONはあなたがJSONを使用する場合は、処理するのに非常に注意する必要があり、バックデートされます。 そう、googleによって開発されたGSON APIを使用してください。それはjson apiの助けによって作られています。 このリンクをご覧ください。 Click here