OnCompleteListener和CompletionListener有什么区别?

时间:2019-08-25 16:01:39

标签: java android firebase firebase-realtime-database

我正在使用实时数据库,在以下2种方法之间感到有点困惑:

  ROOT_REF.updateChildren(map, new DatabaseReference.CompletionListener() {
            @Override
            public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {

            }
        });

        ROOT_REF.updateChildren(map).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {

            }
        });

我想知道它们之间的区别以及何时应使用CompletetionListenerOnCompleteListener

1 个答案:

答案 0 :(得分:1)

虽然两个updateChildren()方法都做同样的事情:

  

将特定的子键更新为指定的值。

DatabaseReference的区别在于:

  

updateChildren(Map update)

  

updateChildren(Map update, DatabaseReference.CompletionListener listener)

第一个返回一个Task<Void>对象,您可以使用addOnCompleteListener查看工作何时完成:

  

添加在任务完成时调用的侦听器。

第二个返回void。为了更新子级并查看工作何时完成,应将DatabaseReference.CompletionListener)对象作为第二个参数传递,该对象基本上在做相同的事情。一旦实现了onComplete()方法,当特定参考上的工作完成时,您会收到通知。

您应该根据自己的喜好使用一种。我通常使用第一个,因为如果有更多需要完成的任务,可以使用Tasks的whenAllComplete(Task... tasks)

  

返回带有任务列表的任务,当所有指定任务完成时,任务列表将成功完成。

我觉得这更方便。