我如何知道是使用OnComplete还是OnSuccess?

Tal*_*rda 17 java firebase

我试图在网上找到答案,但我找不到一个特定于Firebase实现的答案.

我可以选择OnCompleteListenerOnSuccessListener进行大量的操作Firebase,我想知道如何在它们之间做出选择?

我已阅读的文档的onComplete的onSuccess,但我可以从火力地堡单证看到,这一个例如,用于(如一个具体操作get的示例操作),他们有时用OnSuccessListener,有时他们使用OnCompleteListener.

我怎么知道在任何情况下哪一个更好?有关系吗?考虑到我想知道每项操作是否成功.

sli*_*lim 34

顾名思义,onSuccess()当任务成功完成时将触发.

onComplete() 任务完成后即使失败也会触发.

在方法中,您可以调用Task.isSuccessful()Task.getException().

onSuccess()你可以确定isSuccessful()将返回true,getException()并将返回null(所以没有多少调用它们).

onComplete() isSuccessful()可能false的,你有机会处理故障,可能使用getException()以获得更多的细节.

如果你需要处理失败的任务(你应该!),你有两个选择:

  1. 使用和OnCompleteListener,if(task.isSuccessful()) { ... } else {...}- 这会将成功和失败代码放在一起,如果这些例程共享状态,则可能很有用.
  2. 使用单独OnSuccessListenerOnFailureListener- 这允许您编写具有更多内聚的侦听器,因为每个处理程序专门处理一件事.当然,一个类可以实现两个接口,为您提供另一种方法来同时看到相同的状态.


Job*_*b M 5

添加到上面我使用的slimFirebase回答的内容。我发现这两个听众 (OnCompleteListenerOnSuccessListener)

将数据写入服务器时有不同的回调时间。

一般经验法则

如果您依靠系统(顺序)写入服务器的方式来执行某些逻辑,那么使用OnCompleteListener

如果您不依赖于写入服务器的系统(非顺序即异步任务)方式来执行某些逻辑,那么使用OnSuccessListener