Java 让TaskCompletionSource工作(Firestore的Android任务)

Java 让TaskCompletionSource工作(Firestore的Android任务),java,android,firebase,google-play-services,Java,Android,Firebase,Google Play Services,在对其他stackoverflow问题的回答中:提供了一些示例,说明如何利用TaskCompletionSource在任务中运行延迟调用 在一个简单的示例(如下所示)中实现此功能时,我遇到了以下问题:行.continueWith(new TaskerB())将不会编译,因为编译器希望任务作为第一个参数:不兼容的相等约束:Task和String,我希望此参数应仅为String类型?谁能帮助我使用此代码,并向我解释如何成功使用TaskCompletionSource 注意:这个例子非常简单,在实际使

在对其他stackoverflow问题的回答中:提供了一些示例,说明如何利用
TaskCompletionSource
在任务中运行延迟调用

在一个简单的示例(如下所示)中实现此功能时,我遇到了以下问题:行
.continueWith(new TaskerB())
将不会编译,因为编译器希望任务作为第一个参数:
不兼容的相等约束:Task和String
,我希望此参数应仅为String类型?谁能帮助我使用此代码,并向我解释如何成功使用
TaskCompletionSource

注意:这个例子非常简单,在实际使用中,我会运行一个Firestore操作,设置一个监听器,并从监听器内部调用
tcs.setResult(…)

    public class StartTask implements Callable<Integer>{
        @Override
        public Integer call() throws Exception {
            return 1;
        }
    }

    public class TaskerA implements Continuation< Integer, Task<String>>{
        @Override
        public Task<String> then(@NonNull Task<Integer> task) throws Exception {
            final TaskCompletionSource<String> tcs = new TaskCompletionSource<>();
            tcs.setResult( "value: " + task.getResult() );
            return tcs.getTask();
        }
    }

    public class TaskerB implements Continuation< String, Void>{
        @Override
        public Void then(@NonNull Task<String> task) throws Exception {
            Log.d(TAG, "Output is: " + task.getResult());
            return null;
        };
    }

    public void runExample(){
        Tasks.call( new StartTask() )
            .continueWith( new TaskerA() )
            .continueWith( new TaskerB() ));
    }
公共类StartTask实现可调用{
@凌驾
公共整数调用()引发异常{
返回1;
}
}
公共类TaskerA实现Continuation{
@凌驾
公共任务(@NonNull Task Task)引发异常{
final TaskCompletionSource tcs=新TaskCompletionSource();
setResult(“值:+task.getResult());
返回tcs.getTask();
}
}
公共类TaskerB实现Continuation{
@凌驾
public Void然后(@NonNull任务)引发异常{
d(标记“输出为:”+task.getResult());
返回null;
};
}
public void运行示例(){
Tasks.call(新的StartTask())
.continueWith(新TaskerA())
.continueWith(新任务b());
}
改用:

改用:

Tasks.call(new StartTask())
        .continueWithTask(new TaskerA())
        .continueWith(new TaskerB());