0

タイトルでごめんなさい、説明します。

GoogleAppEngineでWebサービスを使用するAndroidアプリを開発しています。私のWebサービスでは、JAX-RSを介してJSONに変換されたArrayListがあり、最終的なJSONは次のようになります。

{"レッスン":[{"名前": "blabla"、 "教授": "トム"}、{"名前": "blabla"、 "教授":"トム"}]}

これは実用的ですか、それとももっと良い方法がありますか?

次に、AndroidアプリからこのJSONをフェッチし、オンラインで見つかったスニペットを使用してJSONObjectに変換します。

DefaultHttpClient defaultClient = new DefaultHttpClient();

HttpGet httpGetRequest = new HttpGet(s);

HttpResponse httpResponse = defaultClient.execute(httpGetRequest);

BufferedReaderリーダー=newBufferedReader(new InputStreamReader(httpResponse.getEntity()。getContent()、 "UTF-8"));

文字列json=reader.readLine();

JSONObject jsonObject = new JSONObject(json);

ArrayListに戻るにはどうすればよいですか?

たくさんのコードを読んでGsonを使おうとしました...これは簡単なはずですが、昨日は丸一日を失いました。

4

3 に答える 3

2
  private class Info {
        public String name;
        public String prof;
    }

    ArrayList<Info> arrayList = new ArrayList<Info>();

    JSONArray array = jsonObject.optJSONArray("lessons");
    int len = array.length();

    for (int i = 0; i < len ; i++) {
     JSONObject tmp = array.optJSONObject(i);
     Info info = new Info();
     info.name = tmp.optString("name");
     info.prof = tmp.optString("prof");
      arrayList.add(info)
}

スペルミスをチェックします

于 2012-04-19T10:25:44.580 に答える
0

この投稿から私の例をダウンロードしてください。オブジェクトをjsonオブジェクトに変換する方法を示す完全に機能するソースコード。お役に立てば幸いです。私のAndroidアプリに単純なオブジェクトの配列を保存するにはどうすればよいですか?

于 2012-04-19T10:15:30.040 に答える
0

組み込みのJSONクラスを使用する場合は、次のようにすることができます。

DefaultHttpClient defaultClient = new DefaultHttpClient();
HttpGet httpGetRequest = new HttpGet(s);
HttpResponse httpResponse = defaultClient.execute(httpGetRequest);
BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));
String json = reader.readLine();
JSONObject jsonObject = new JSONObject(json);
if (jsonObject.has("lessons")) {
    JSONArray jsonLessons = jsonObject.getJSONArray("lessons");
    List<Lesson> lessons = new ArrayList<Lesson>();
    for(int i = 0; i < jsonLessons.length(); i++) {
        JSONObject jsonLesson = jsonLessons.get(i);
        // Use optString instead of get on the next lines if you're not sure
        // the fields are always there
        String name = jsonLesson.getString("name");
        String teacher = jsonLesson.getString("prof");
        lessons.add(new Lesson(name, teacher));
    }
}

Jsonが常に1行で到着することを確認してください。行を壊すと、その行を読むだけなので、このコードは壊れます。

私の選択はGsonです。この場合、LessonクラスとScheduleクラスを作成します。

public class Lesson {

    String name;
    String prof;

}

public class Schedule {

    List<Lesson> lessons;
}   

フィールド名はjsonフィールドに対応していることに注意してください。フィールドをプライベートにして、気分が良くなった場合はsomgetterメソッドを追加してください。:-)

これで、レッスンリストを含むScheduleオブジェクトを次のように解析できます。

DefaultHttpClient defaultClient = new DefaultHttpClient();
HttpGet httpGetRequest = new HttpGet(s);
HttpResponse httpResponse = defaultClient.execute(httpGetRequest);
Reader in = new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8");

Gson gson = new Gson();
Schedule schedule = gson.fromJson(in, Schedule.class);
List<Lesson> lessons = schedule.lessons;

お役に立てれば!

于 2012-04-19T10:33:56.973 に答える