1. ホーム
  2. java

[解決済み] volleyで同期リクエストはできますか?

2022-06-02 09:27:30

質問

すでにバックグラウンドスレッドを持っているサービスにいると想像してください。コールバックが同期的に行われるように、その同じスレッドでvolleyを使用してリクエストを行うことはできますか?

これには2つの理由があります。

  • まず、別のスレッドは必要なく、それを作成するのは無駄です。
  • 次に、ServiceIntent 内にいる場合、コールバックの前にスレッドの実行が終了してしまうので、Volley からの応答がありません。自前でServiceを作り、そのServiceのスレッドをランループで制御することは可能ですが、Volleyにこの機能があれば望ましいと思います。

どのように解決するのでしょうか?

ボレーで可能なようです。 RequestFuture クラスで可能なようです。例えば、JSONのHTTP GETリクエストを同期して作るには、以下のようにします。

RequestFuture<JSONObject> future = RequestFuture.newFuture();
JsonObjectRequest request = new JsonObjectRequest(URL, new JSONObject(), future, future);
requestQueue.add(request);

try {
  JSONObject response = future.get(); // this will block
} catch (InterruptedException e) {
  // exception handling
} catch (ExecutionException e) {
  // exception handling
}