2011-11-28 21 views

答えて

5

これまでの標準フォーマットでStringに変換し、それを解析して既存のライブラリを使用して構築する必要があります。たとえば、JSON、XML、CSVなどがあります。これらはすべて、標準化された交換可能な文字列形式であり、多数のプログラミング言語に多くの解析/構築ライブラリが存在します。

AndroidにはJSONパーサーが組み込まれています(the org.json package)。それはに組み込まれたXMLパーサを持っています。組み込みのCSVライブラリがあるかどうかはわかりませんが、存在しないようです。 Java EEは、JAXBの素晴らしい組み込みXMLパーサーのフレーバーを持っていますが、組み込みのJSONパーサーはありません。 JAX-RS実装(Jersey、RESTeasyなど)のみがJSONパーサーを提供します。サーブレットをJAX-RS Webサービスに変更することができれば、最小限の労力でXMLとJSONの両方を返すことができるというメリットがあります。 Servlet vs RESTfulも参照してください。

どのフォーマットを選択するかは、機能要件によって異なります。例えば、サーブレットは他のサービスのために再利用されるはずですか?ターゲットクライアントとは何ですか? Etcetera。

JSON形式は通常、XMLよりも簡潔で普及しているので、JSON形式でデータを転送するキックオフの例を示します。実際にやりたいことを前提としますJAX-RSではなくプレーンなバニラ・サーブレットを使用しています。この例では、GsonなどのJSONライブラリを/WEB-INF/libにダウンロードしてドロップするだけで、JavaオブジェクトをサーブレットのJSONに変換できます。

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    List<String> list = new ArrayList<String>(); 
    list.add("item1"); 
    list.add("item2"); 
    list.add("item3"); 
    String json = new Gson().toJson(list); 

    response.setContentType("application/json"); 
    response.setCharacterEncoding("UTF-8"); 
    response.getWriter().write(json); 
} 

これは、次のようなJSON形式でListを構築し、返します。

["item1","item2","item3"] 

次のようにこれは、Androidでorg.json APIによってターン解析可能である:

String jsonString = getServletResponseAsStringSomehow(); // HttpClient? 
JSONArray jsonArray = new JSONArray(jsonString); 
List<String> list = new ArrayList<String>(); 

for (int i = 0; i < jsonArray.length(); i++) { 
    list.add(jsonArray.getString(i)); 
} 

// Now you can use `list`. 
+0

ありがとう!!!!!!初めての使用json –

+0

ようこそ。 JSON形式の詳細については、http://json.orgを参照してください。 – BalusC

+0

これは超古かったことを認識していますが、とても役に立ちましたので、私はまだ書いていると思っていました。私は上のコード例でサーブレットをコンパイルしようとしていますが、 "エラー:シンボル|文字列json =新しいGson()など"(Gsonを指す矢印)を見つけることができません。どのライブラリを含めるべきかわからなかったので、gson-2.2.3.jarとgson-2.2.3-sources.jarの両方を使用しています 何が問題なのでしょうか? –

1

プル型モデルの場合、アンドロイドアプリからサーブレットエンドポイントにHTTP GETリクエストを送信できます.HTTPレスポンスは、配列リストから作成されたJSONオブジェクトです。

+0

はどんな例がありますサーブレットのarrayListをreutrnするためのコード? –

関連する問題