我有一个Retrofit网络调用,希望每5秒运行一次。我的当前代码:
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);
这段代码只会运行一次,但是随后抛出以下异常:
java.lang.IllegalStateException: Already executed. at retrofit2.OkHttpCall.enqueue(OkHttpCall.java:52) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.enqueue(ExecutorCallAdapterFactory.java:57) at orbyt.project.MyFragment$1.run(MyFragment.java:93)
问题出在哪里?
额外提供:有没有更好的处理方法?我会在每次更新时更新一个地图。我考虑尝试使用Rx,但不确定这是否是适当的用例,或如何实现它。