Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 仅从实时数据库检索一次数据_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 仅从实时数据库检索一次数据

Android 仅从实时数据库检索一次数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我希望我的应用程序允许用户将其数据备份到实时数据库并进行恢复。我已经实现了备份功能,但在尝试实现恢复功能时遇到了问题。因为ChildEventListener只允许您实时检索数据,这是一个问题,因为我需要知道备份何时完成下载。如何仅检索一次数据?要仅检索一次数据,需要使用以下命令: 在此位置为数据中的单个更改添加侦听器。此侦听器将使用该位置的数据值触发一次 您需要改为使用addListenerForSingleValueEvent() 例如: FirebaseDatabase.getInsta

我希望我的应用程序允许用户将其数据备份到实时数据库并进行恢复。我已经实现了备份功能,但在尝试实现恢复功能时遇到了问题。因为
ChildEventListener
只允许您实时检索数据,这是一个问题,因为我需要知道备份何时完成下载。如何仅检索一次数据?

要仅检索一次数据,需要使用以下命令:

在此位置为数据中的单个更改添加侦听器。此侦听器将使用该位置的数据值触发一次


您需要改为使用addListenerForSingleValueEvent() 例如:

FirebaseDatabase.getInstance()
            .getReference()
            .child("Your Node")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    // Do whatever you need with your data (retrieved only once)
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    // Handle Database Error
                }
            });

对于数据库引用对象,与添加事件侦听器的方法相同,也可以使用
removeEventListener
将其删除

而不是像这样创建匿名对象

checkBuy.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {

                checkPurchase(snapshot);

                addListView();

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
});
您可以创建
ValueEventListener
的命名对象,并使用
removeEventListener
onDataChange
方法末尾将其从数据库引用对象中删除

ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {

                checkPurchase(snapshot);

                addListView();

                checkBuy.removeEventListener(valueEventListener);
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
});

checkBuy.addValueEventListener(valueEventListener);
onDataChange
方法中的代码只执行一次,因为只要执行该方法的最后一行,
ValueEventListener
对象就会被删除