繁体   English   中英

Android,翻新2:如何每5秒拨打一次电话?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM