调用ListenableWorker而不点击startWork()

时间:2019-06-17 06:57:58

标签: android android-workmanager

我是工作经理的新手...在我的应用程序中有一个场景,需要定期使用REST API将数据备份到服务器。看来,工作经理是一个完美的解决方案(如果还有其他建议,请告诉我)。

在文档中,他们说ListenableWorker可以解决我的问题。因此,我已经实现了它,并使用OneTimeWorkRequest调用了它(只是为了测试它,应该在适当的情况下使用PeriodicWorkRequest)。

但是问题在于它不会触发worker :(。 谁能帮我解决这个问题。我想念什么?

 Constraints constraints = new Constraints.Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED)
                .build();

OneTimeWorkRequest request = new 
                OneTimeWorkRequest.Builder(SyncToServerWorker.class)
                        .setConstraints(constraints)
                        .build();

WorkManager.getInstance().enqueueUniqueWork("my-unique-name", 
                ExistingWorkPolicy.KEEP, request);

工人阶级

public abstract class SyncToServerWorker extends ListenableWorker {

    private Context context;
    public SyncToServerWorker(Context context, WorkerParameters params) {
        super(context, params);
        this.context = context;
    }

    @NonNull
    @Override
    public ListenableFuture<Result> startWork() {
        return CallbackToFutureAdapter.getFuture(completer -> {

            BaseResponse.Callback callback = new BaseResponse.Callback() {
                @Override
                public void onSuccess() {
                    completer.set(Result.success());

                }

                @Override
                public void onFailure(String message) {
                    completer.setException(new Throwable(message));
                }
            };
            DataManager.getInstance(context).syncOfflineData(callback);
            return callback;
        });
    }
}

0 个答案:

没有答案