Невозможно увеличить значение child в Firebase для конкретного пользователя - PullRequest
0 голосов
/ 20 мая 2018

У меня есть кнопка для входа в систему.Когда вошедший в систему пользователь нажимает кнопку, я хочу увеличить конкретное значение для этого конкретного пользователя.Сейчас я использую приведенный ниже код, но он создает дочерний элемент в базе данных Firebase и увеличивает объем данных.Я хочу, чтобы он увеличил данные определенного (вошедшего в систему) дочернего («точки») пользователя.

myRef.child("points").runTransaction(new Transaction.Handler() {
    @Override
    public Transaction.Result doTransaction(final MutableData currentData) {
        if (currentData.getValue() == null) {
            currentData.setValue("0");
        } else {
            String stringValue = (String) currentData.getValue();
            int intValue = Integer.parseInt(stringValue);
            int increasedIntValue = intValue + 1;
            currentData.setValue(String.valueOf(increasedIntValue));
        }
        return Transaction.success(currentData);
    }

    @Override
    public void onComplete(DatabaseError databaseError, boolean committed, DataSnapshot currentData) {
        if (databaseError != null) {
            System.out.println("Firebase counter increment failed!");
        } else {
            System.out.println("Firebase counter increment succeeded!");
        }
    }
});

База данных:

Image of database

Что мне теперь делать?

1 Ответ

0 голосов
/ 20 мая 2018
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
user.addListenerForSingleValueEvent(new ValueEventListener() {
       @Override
       public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.hasChild("points")) {
              if (dataSnapshot.getValue() == null) {
              dataSnapshot.setValue("0");
             } else {
            String stringValue = (String) dataSnapshot.getValue();
            int intValue = Integer.parseInt(stringValue);
            int increasedIntValue = intValue + 1;
            dataSnapshot.setValue(String.valueOf(increasedIntValue));
}}

        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });

addListenerForSingleValueEvent : этот слушатель помогает вам обнаружить изменение данных в определенном пути (включая дочерние элементы в этом конкретном пути).Этот слушатель слушает ровно один раз и предоставляет вам данные в соответствии с изменением, пока это событие не было запущено.

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