-1

サーバーに接続してjsonデータを取得できます。この形式です:

    {"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"},
.
.
.
    ]}

私のコードは次のようなものです:

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


    }

「strServerResponseMsg」変数に応答したJsonがあります。しかし、行" JSONArray jObjects = new JSONArray(strServerResponseMsg);"Logcatはtypemismatchエラーを示しています。

私の問題は何ですか?

4

4 に答える 4

4

{それがオブジェクトであることを意味します。[配列であることを意味します。文字列はで始まる{ので、JSONArrayではなくJSONObjectです。

JSONArray jObjects = new JSONArray(strServerResponseMsg);

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

JSONObject jObjects = new JSONObject(strServerResponseMsg);
于 2012-04-05T05:05:45.143 に答える
1

与えられたjsonの例はjsonarrayではなくjsonobjectであるため、次のようにする必要があります

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

次に、jArrayを反復処理します

于 2012-04-05T05:00:56.660 に答える
0

JSONは古くなっています。jsonを使用する場合は、取り扱いに細心の注意を払う必要があります。そのため、Googleが開発したGSONAPIを使用してください。それはjsonapiの助けを借りて作られています。このリンクにアクセスしてください- ここをクリックしてください

于 2012-04-05T06:20:10.920 に答える
0

'{'で明らかなように、これは取得しているJSONObjectです。

  JSONObject j=null;

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


 }
 Log.w("json",j.toString());
于 2012-04-05T05:15:11.487 に答える