Запись новых целочисленных данных в базу данных Firebase Android Java - PullRequest
0 голосов
/ 27 апреля 2020

Со вчерашнего дня я пытался добавить значение в свою базу данных Firebase, я пробовал несколько методов, но не могу этого сделать.

Когда пользователь смотрит на RewardedAD, этот вызов addCard, который должен добавить текущему пользователю 1 карточку, и каждый раз, когда он добавляет карточку к нему, не удаляя значение.

это мой код для RewardedAd ( Объявление показывается правильно ):

@Override
public void onUserEarnedReward(@NonNull RewardItem reward) {
// User earned reward.
addCard();

И это addCard:

private void addCard() {
    FirebaseUser user =  mAuth.getCurrentUser();

    mDatabase.child("users").child(user.getUid()).runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            Integer carte = mutableData.getValue(Integer.class);
                mutableData.setValue(carte + 1);

            return Transaction.success(mutableData);
        }

        @Override
        public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {}
    });
}

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Я полагаю, вы пытаетесь создать поле, которое не существует посредством транзакции

Возможно, именно так должна выглядеть ваша структура:

users
|
|-----------UID
             |
             ---card : 1 //and you want to keep updating this

Попробуйте это:

private void addCard() {
    FirebaseUser user =  mAuth.getCurrentUser();

mDatabase.child("users").child(user.getUid()).child("card").runTransaction(new Transaction.Handler() {
    @Override
    public Transaction.Result doTransaction(MutableData mutableData) {
        Integer card = mutableData.getValue(Integer.class);

         if(card == null){
          //if no card exist yet start with 1
          mutableData.setValue(1);  
          return Transaction.success(mutableData);

         }else{
         //there is card just increment it +1
         mutableData.setValue(card + 1);

         }


        return Transaction.success(mutableData);
    }

    @Override
    public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {}
});
}
0 голосов
/ 27 апреля 2020

Измените mDatabase.child("users").child(user.getUid()) в вашем коде с помощью mDatabase.child("users").child(user.getUid()).child("carte") Будет создано

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