FireBase TIMESTAMP нежелательно обновляет - PullRequest
0 голосов
/ 12 марта 2020

Моя идея - позволить пользователю добавлять вещи в свой список пользователей. Когда пользователь нажимает флажок, он создает элемент с данными в базе данных FireBase (я хочу отсортировать список пользователей в будущем по времени).

enter image description here enter image description here

Я делаю это с помощью следующего кода:

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();
                }
            }
        });

И для проверки checkBox (если пользователь уже добавил элемент ранее) я использую код:

//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) { }
        });

Таким образом, все в порядке, за исключением каждого случая, когда код «проверки» обнаруживает, что элемент уже добавлен, устанавливает флажок как проверенный и затем время обновления базы данных ( это разрушает мою идею сортировки по времени).

Как я могу реализовать идею "TIMESTEAMP" с базой данных FireBase, а не обновлять время после каждой проверки?

Хотели бы увидеть ваши ответы и фрагменты совета. Заранее спасибо.

1 Ответ

1 голос
/ 12 марта 2020

Спасибо Энди.

Для решения этой проблемы я сделал добавление и удаление элементов с помощью 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 когда пользователь нажимает на флажок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...