【问题标题】:Write new Integer Data in Firebase Database Android Java在 Firebase 数据库 Android Java 中写入新的整数数据
【发布时间】:2020-04-27 06:57:30
【问题描述】:

从昨天开始,我一直在尝试向我的 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) {}
    });
}

【问题讨论】:

  • mutableData.setValue("${carte+1}")
  • @MohammadMoeinGolchin 我刚刚尝试过,但数据库端没有任何反应:/
  • @MohammadMoeinGolchin Kotlin 中的代码,用于读取数据?因为我会写数据^^
  • 在那个问题代码中,你可以找到写数据

标签: java android firebase firebase-realtime-database


【解决方案1】:

将您的代码中的mDatabase.child("users").child(user.getUid()) 更改为mDatabase.child("users").child(user.getUid()).child("carte") 它将被创建

【讨论】:

  • .("carte") 还是 .child("carte") ?我试过没有在数据库中创建“carte”字段,它不会创建它,但如果我在它工作之前创建:/
  • .child("carte") @VictorAppercé
【解决方案2】:

我猜你正在尝试通过交易创建不存在的文件

也许你的结构应该是这样的:

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

【讨论】:

  • 嗨,对不起,我已经解决了在寄存器中创建字段 Carte 时的问题 ^^ 并且它可以工作,但是,现在我尝试在用户在 alertDialog 中使用 NumberPicker 时删除 Carte 的数量,它可以工作,但我没有'不知道为什么当我删除 Carte 的值时我的应用程序崩溃,但它的工作原理。
  • 这一定是其他问题,在您的代码中,因此是另一个问题。但是如果上面的代码对你有用,它一定是你问题的解决方案,我猜你必须提出一个新问题。
猜你喜欢
  • 2017-01-24
  • 2021-11-17
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2022-01-18
  • 2017-10-28
  • 2017-05-28
  • 1970-01-01
相关资源
最近更新 更多