首页 > 解决方案 > FireBase TIMESTAMP 意外更新

问题描述

我的想法是允许用户在他的用户列表中添加东西。当用户单击复选框时,它会在 FireBase 数据库中创建一个包含数据的项目(我希望将来按时间对用户列表进行排序)。

在此处输入图像描述 在此处输入图像描述

我通过以下代码这样做:

favCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if(b){
                    //Add item
                    favMap.put("comicsId", comicsId);
                    favMap.put("comicsGenreId", comicsGenreId);
                    favMap.put("comicsTitle", comicsTitle);
                    favMap.put("time", ServerValue.TIMESTAMP);
                    favListRef.setValue(favMap);
                }
                if(!b){
                    //Remove item
                    favListRef.removeValue();
                }
            }
        });

并检查复选框(如果用户之前已经添加过项目)我使用代码:

//Check if already added
        favListRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
                    if(dataSnapshot1.getValue() != null && !dataSnapshot1.getValue().equals("")){
                        //Item already added set as checked
                        favCheckBox.setChecked(true);
                    }
                }
            }

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

所以一切都很好,除了每次“检查器”代码发现一个项目已经添加时,它将复选框设置为选中,然后在数据库更新中计时(这破坏了我按时间排序的想法)。

如何使用 FireBase 数据库实现“TIMESTEAMP”理念,而不是在每次检查后更新时间?

想看看你的答案和建议。提前致谢。

标签: javaandroidfirebasefirebase-realtime-databasetimestamp

解决方案


感谢安迪。

为了解决这个问题,我通过onClickListener添加和删除了项目:

boolean checkBoxChecked;
...
//ClickListener
        favCheckBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(checkBoxChecked){
                    //Remove item
                    favListRef.removeValue();
                    checkBoxChecked = !favCheckBox.isChecked();//false
                }
                if(!checkBoxChecked){
                    //Add item
                    favMap.put("comicsId", comicsId);
                    favMap.put("comicsGenreId", comicsGenreId);
                    favMap.put("comicsTitle", comicsTitle);
                    favMap.put("time", ServerValue.TIMESTAMP);
                    favListRef.setValue(favMap);
                    checkBoxChecked = favCheckBox.isChecked();//true
                }
            }
        });

        //Check if user already added item
        favListRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
                    if(dataSnapshot1.getValue() != null && !dataSnapshot1.getValue().equals("")){
                        //Item was added
                        favCheckBox.setChecked(true);
                        checkBoxChecked = favCheckBox.isChecked();//true
                    }
                }
            }

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

TIMESTAMP 仅在用户单击复选框时更改。


推荐阅读