0

ID の配列を含む JSON 本文を渡すカスタム サービス モジュールがあります。これらの ID を反復処理し、ID ごとに個別の Web サービス呼び出しを行って応答本文を取得し、これらの応答をカスタム JSON 構造に集約する必要があります。私はそれをすべて機能させていますが、スレッド化 (またはその何らかの方法) を実装して、連続ではなく非同期で HTTP 呼び出しを行いたいと考えています。次のコードでスレッドを実装するにはどうすればよいですか。

    ids = (JSONArray) jsonIn.get("IDs");    

    MyClass myClass = null;
    List<MyClass> myClassList = new ArrayList<MyClass>();

    for (int i = 0; i < ids.size(); i++) {
        JSONObject p = (JSONObject)ids.get(i);
        id = p.get("ID").toString();

        //The HttpUrlConnection call is made in the getResponse() method
        Gson gson = new Gson();
        MyClassResponse result = gson.fromJson(getResponse(),
                MyClassResponse.class);

        for (int x = 0; x < result.ids[0].id.length; x++) {

            myClass = new MyClass();

            myClass.setStringOne(result.ids[0].fieldOne);
            myClass.setStringTwo(result.ids[0].fieldTwo);

            myClassList.add(x, myClass);
        }           
    }

    Gson gsonOut = new Gson();
    String jsonString = gsonOut.toJson(myClassList);

    JsonArray jsonArray = new JsonParser().parse(jsonString).getAsJsonArray();

    JSONObject response = new JSONObject();
    response.put("CustomStructure", jsonArray);

    //pass back custom JSON body
4

2 に答える 2

0

このロジックを使用します。

  • ループが行っていることを実行する Runnable を作成し、コンストラクターは個々の JSONObject を入力として受け取ります。
  • 出力 MyClassResponse をメンバー変数としてランナブルに保存します。
  • スレッドのリストと Runnable のリストをループの外で宣言する
  • ループ内にスレッドとランナブルを作成し、リストに追加します
  • ループ内でスレッドを開始する
  • ループの後、スレッドのリスト内の各スレッドで Thread.join を呼び出します (これにより、このスレッドはスレッドが完了するまで待機します)。
  • すべての結合ステートメントが返されたら、実行可能なリストから MyClassList を作成します
于 2013-07-24T02:02:44.370 に答える