[英]Android, Retrofit 2: How to make calls every 5 second?
这是我的代码:
private void getUserData(){
//create Retrofit instance
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create());
Retrofit retrofit = builder.build();
//get client & call object for the request
APIService userService = retrofit.create(APIService.class);
Map<String, Object> map = new HashMap<>();
map.put("device_id", Utils.GetDeviceID(DashboardActivity.this));
Call call = userService.getUser(map);
//execute network request
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if(response.isSuccessful() && response.body() != null){
response.body();
UserDataManager.$().setUserDataResponse(new com.google.gson.Gson().toJson(response.body()));
if(UserDataManager.$().getUserData() != null){
Log.d(TAG, "USER ID: " + UserDataManager.$().getUserData().getId());
}
}
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
}
问题:如何每隔5秒调用一次此方法,以检查新数据是否来自后端?
将很高兴为您提供建议和提示,谢谢
在这种情况下,RxAndroid将非常有用。 您可以像这样创建循环
Subscription subscription = Observable.interval(1000, 5000,
TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Long>() {
public void call(Long aLong) {
// here is the task that should repeat
}
});
如果要停止循环,只需调用
subscription.unsubscribe()
您可以使用Handler
来实现每5秒拨打一次电话。
boolean shouldStopLoop = false;
Handler mHandler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
getUserData();
if (!shouldStopLoop) {
mHandler.postDelayed(this, 5000);
}
}
};
并调用mHandler.post(runnable);
开始通话。
Completable.timer(5, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::doYourThing, this::onError))
但是更好的选择是,由于网络调用是一项昂贵的操作,因此如果数据发生更改,请后端开发人员发送一个Firebase通知。
workmanager将帮助您检查文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.