0

次のURLからjsonを解析しています

http://www.kaverisoft.com/careers/assignments/android/a1.php

次のコードで

public class MainActivity extends ListActivity {

/** Called when the activity is first created. */
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setListAdapter(new ArrayAdapter(
            this,android.R.layout.simple_list_item_1,
            this.populate()));
}

private ArrayList<String> populate() {
    ArrayList<String> items = new ArrayList<String>();

    try {
        URL url = new URL
        ("http://www.kaverisoft.com/careers/assignments/android/a1.php");
        HttpURLConnection urlConnection =
            (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.connect();
                    // gets the server json data
        BufferedReader bufferedReader =
            new BufferedReader(new InputStreamReader(
                    urlConnection.getInputStream()));

        String next;
        while ((next = bufferedReader.readLine()) != null){
            JSONArray ja = new JSONArray(next);

            for (int i = 0; i < ja.length(); i++) {
                JSONObject jo = (JSONObject) ja.get(i);
                items.add(jo.getString("text"));
            }
        }
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return items;
}

}

logcat は、org.json.JSONException 値のテキストが見つからないことを示しています

しかし、リストビューにデータを入力することはできませんが、直接json形式のURLを使用すると、データを入力できます助けてください。

出力は下の画像のようになります。

これを解決するのを手伝ってください。

4

1 に答える 1

1

私が見る限り、リストにはカメラ、本、音楽の 3 種類のオブジェクトがあります。それらのそれぞれについて、異なる解析を使用する必要があります。まず、配列の現在の要素がどの種類のオブジェクトであるかを検出する必要があります。

例えば:

if (jo.has("book")) {
  JSONObject jsonBook = jo.getJSONObjcejt("book");
  // continue with parsing book stuff
} else if (jo.has("camera"){
  // same, but for camera
} else if (jo.has("music") {
  // same, but for music
}

次に、解析した書籍、音楽、カメラ オブジェクトをリストに入力できます。よりスマートな解析が必要な場合は、gsonをご覧ください。

于 2012-08-22T17:47:02.027 に答える