【问题标题】:How to deletel last node from firebase database onClick listener?如何从firebase数据库onClick监听器中删除最后一个节点?
【发布时间】:2020-12-14 02:20:29
【问题描述】:

我正在使用一个按钮来删除我数据库中的最后一个条目。

但是一旦我点击它,Firebase 中的所有数据都会被删除,而不仅仅是最后一个条目。我知道我可以使用“limitToLast”,但我不知道如何正确使用它。我该怎么做?

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Query query = databaseReference.child("uploads").limitToLast(1);
                query.getRef().removeValue();

            }

这是我的 Firebase 数据结构: database structure

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    Firebase 不支持删除查询,您可以将条件发送到数据库以在每个节点上执行操作。 query.getRef() 实际上会返回您正在运行查询的节点,因此实际上您运行的是:

    databaseReference.child("uploads").removeValue();
    

    这就解释了为什么整个 uploads 节点会被删除。


    相反,您必须:

    1. 执行查询。
    2. 将结果提取到您的应用程序代码中。
    3. 对每个结果执行操作。

    所以在代码中:

    Query query = databaseReference.child("uploads").limitToLast(1);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot results) {
            for (DataSnapshot snapshot: results.getChildren()) {
                snapshot.getRef().removeValue();
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    }
    

    【讨论】:

      【解决方案2】:

      您的代码按预期工作。它肯定会删除“上传”下的所有内容。问题是您的查询实际上并没有被执行。您只是在构建查询而不运行它。我建议查看documentation 以了解如何运行查询,然后使用查询结果来确定要删除的子项。您需要为查询添加一个侦听器才能真正获得其结果。

      【讨论】:

        猜你喜欢
        • 2018-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-12
        • 1970-01-01
        相关资源
        最近更新 更多