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

Gio*_*yan 3 java android retrofit retrofit2

这是我的代码:

 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) {

        }
    });
}
Run Code Online (Sandbox Code Playgroud)

问题:如何每 5 秒调用一次该方法,检查是否有新数据来自后端?

很高兴提供建议和提示,谢谢

小智 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
            }
        });
Run Code Online (Sandbox Code Playgroud)

如果你想停止循环只需调用

subscription.unsubscribe()
Run Code Online (Sandbox Code Playgroud)