Firebase RealTime数据库删除前20个项目

时间:2018-10-16 08:43:50

标签: java android firebase firebase-realtime-database

DatabaseReference newReferance = database.getReference().child("Users");
    Query query = newReferance.orderByChild("timestamp");
    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            chatMessages.clear();
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {

                HashMap<String, String> hashMap = (HashMap<String, String>) dataSnapshot1.getValue();
                //String userMail = hashMap.get("useremail");
                String userMessage = hashMap.get("usermessage");
                String userCt = hashMap.get("usershow");
                chatMessages.add(userCt + ": " + userMessage);
                if (chatMessages.size() >= 10){
                    for (int i= 0; i < 5; i++){
                        //HOW ????
                    }
                }
                recyclerAdapter.notifyDataSetChanged();

            }
        }

嗨,亲爱的大家如何选择和删除实时数据库中的前5个数据?当ArrayList达到某个限制时,我想从数据库中删除前5个数据。如果您能解决这个问题,我们将不胜感激。

5 个答案:

答案 0 :(得分:0)

final DatabaseReference newReferance = database.getReference().child("Users");
    final Query query = newReferance.orderByChild("timestamp");
    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            chatMessages.clear();
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {

                HashMap<String, String> hashMap = (HashMap<String, String>) dataSnapshot1.getValue();
                //String userMail = hashMap.get("useremail");
                String userMessage = hashMap.get("usermessage");
                String userCt = hashMap.get("usershow");
                chatMessages.add(userCt + ": " + userMessage);
                if (chatMessages.size() >= 10){
                    Query query1 = newReferance.limitToFirst(5);
                    query.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            database.getReference().child("Users").setValue(null);
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });
                }
                recyclerAdapter.notifyDataSetChanged();

            }
        }

尽管已设置好,但所有内容均已删除。我无法删除想要的项目。全部清除。

答案 1 :(得分:0)

rootRef是Firebase数据库参考。在尝试删除任何值之前,我们必须获得其实例。您可以看到下面给出的代码。

count = 0;
    rootRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                CommonLocationClass user = postSnapshot.getValue(CommonLocationClass.class);
                if (count < 5) {
                    rootRef.child(user.getPhNo).removeValue();
                    count++;
                }
            }
        }
    }

    @Override
    public void onCancelled (DatabaseError firebaseError){

    }
});

CommonLocationClass是我为了简化火力基础实现而制作的吸气剂设置器模型类

您可以尝试使用它对我有用

答案 2 :(得分:0)

  

如何选择和删除实时数据库中的前5个数据?

您可以使用Firebase Query的limitToFirst(int limit)

  

创建一个具有限制的查询并将其锚定到窗口的开头

并且代码中的代码应如下所示:

Query query = newReferance.orderByChild("timestamp").limitToFirst(5);

请参见我已使用此limitToFirst()方法来帮助您找到前5个项目。要删除它们,只需附加一个侦听器,然后在onDataChange()方法内部使用以下代码行:

dataSnapshot.getRef().removeValue();

答案 3 :(得分:0)

    public void getDataFirebase() {

    /*if (chatMessages.size() == MAX_MSJ_LIMIT){
        database.getReference().child("Users").removeValue();
    }*/
    final DatabaseReference newRefere = database.getReference().child("Users");
    Query query = newRefere.orderByChild("timestamp");
    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            chatMessages.clear();
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {

                HashMap<String, String> hashMap = (HashMap<String, String>) dataSnapshot1.getValue();
                //String userMail = hashMap.get("useremail");
                String userMessage = hashMap.get("usermessage");
                String userCt = hashMap.get("usershow");
                chatMessages.add(userCt + ": " + userMessage);
                recyclerAdapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_LONG).show();
        }
    });

    if (chatMessages.size() >= 10) {
        Query query1 = newRefere.orderByChild("timestamp").limitToFirst(5);
        query1.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                dataSnapshot.getRef().removeValue();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}

它不仅擦除了前5个数据。

答案 4 :(得分:0)

double(a)

我解决了这个问题。有了这段代码