Откуда берется объект Callback в примере ListenableWorker? - PullRequest
1 голос
/ 12 июня 2019

Документы для разработчиков Android показывают пример использования ListenableWorker. Однако, несмотря на добавление councurrent-futures в мой проект, теперь я вижу соответствующий объект Callback, используемый в документах:

 @NonNull
    @Override
    public ListenableFuture<Result> startWork() {
        return CallbackToFutureAdapter.getFuture(completer -> {
            Callback callback = new Callback() {
            ...
            }

Кто-нибудь может указать мне правильное направление? Кажется, что в androidx.concurrent.callback вообще нет класса Callback.

этот - буквально единственный пример кода, который я могу найти, который использует CallbackToFutureAdapter.getFuture вообще.

1 Ответ

1 голос
/ 12 июня 2019

Глядя на документацию к похожему API, мне кажется, что Callback сам по себе не API, а общее представление любой операции с результатами.

https://developer.android.com/reference/androidx/concurrent/futures/CallbackToFutureAdapter.html

Например, вы можете определить обратный вызов следующим образом:

interface AsyncCallback  {
   void onSuccess(Foo foo);
   void onError(Failure failure);
}

И метод startWork следующим образом

@Override
public ListenableFuture<Result> startWork() {
    return CallbackToFutureAdapter.getFuture(completer -> {
        AsyncCallback callback = new AsyncCallback() {
            int successes = 0;

            @Override
            public void onError(Failure failure) {
                completer.setException(failure.getException());
            }

            @Override
            public void onSuccess(Foo foo) {
                completer.set(Result.success());
            }
        };

        for (int i = 0; i < 100; ++i) {
            downloadAsynchronously("https://www.google.com", callback);
        }
        return callback;
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...