2017-05-18 18 views
0

こんにちは、私はこのようなことをやろうとしています。どのような要求がどのプロジェクトに対応しているかを知るにはどんな考えですか?AsynchHttpClientリクエストを追跡する方法

for (int i=0; i<projects.size(); i++) { 
    post("api/Project/getProductionTime", rp, new JsonHttpResponseHandler() { 
     @Override 
     public void onSuccess(int statusCode, Header[] headers, JSONObject response) 
     { 
      projects.get(i).setAmount(<things from response>) 
     } 
    } 
} 

答えて

1

私はあなたが作成前にJsonHttpResponseHandlerのインスタンスを投射すると「凍結」することができます推測するonSuccessブロック内で使用して後:

final <project type> project = projects.get(i); 

ちょうどポストの前に()。

もしそうでなければ、プロジェクトとリクエストの間に1対1の対応を保つことができるマップを作成することができます。

更新: プロジェクトの構造を知らないので、このコードをテストすることはできません。

// I assume that both Project and MyJsonHttpResponseHandler has hashCode() and equals() methods 
// MyJsonHttpResponseHandler is a subcalss of JsonHttpResponseHandler with hashCode() and equals() methods 
private final ConcurrentHashMap<MyJsonHttpResponseHandler, Project> map = new ConcurrentHashMap<>(); 
... 
for (int i=0; i<projects.size(); i++) { 
    MyJsonHttpResponseHandler handler = new MyJsonHttpResponseHandler() { 
     @Override 
     public void onSuccess(int statusCode, Header[] headers, JSONObject response) 
     { 
      Project project = map.get(this); 
      project.setAmount(<things from response>); 

      map.remove(this); 
     } 
    }; 
    map.put(handler, projects.get(i)); 
    post("api/Project/getProductionTime", rp, handler); 
} 
+0

私はマップソリューションについてもっと興味があります。どうしたらいいですか?同様に、別のJsonHttpResponseHandlerを作成してプロジェクトにマップする必要がありますか? – Nagas

+0

答えを更新しました。 –

+0

ありがとうございます@Anton、私はハンドラを処理するための自分の方法を書いたが、アイデアは主にあなたの答えです。 – Nagas

関連する問題