5 秒ごとに実行したい Retrofit ネットワーク呼び出しがあります。私の現在のコード:
Handler h = new Handler();
int delay = 5000; //milliseconds
h.postDelayed(new Runnable() {
public void run() {
call.enqueue(new Callback<ApiResponse>() {
@Override
public void onResponse(Response<ApiResponse> response) {
Log.d("api", "response: " + response.body().getPosition().getLatitude().toString());
}
@Override
public void onFailure(Throwable t) {
}
});
h.postDelayed(this, delay);
}
}, delay);
これは 1 回実行されますが、次のようにスローされます。
java.lang.IllegalStateException: すでに実行されています。retrofit2.OkHttpCall.enqueue(OkHttpCall.java:52) で retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.enqueue(ExecutorCallAdapterFactory.java:57) で orbyt.project.MyFragment$1.run(MyFragment.java:93)
ここでの問題は何ですか?
おまけとして:これを処理するより良い方法は何ですか?更新ごとにマップを更新します。Rx を使用しようと考えていましたが、これが適切なユースケースであるかどうか、または実装方法がわかりません。