当前位置: 首页 > 知识库问答 >
问题:

在Firebase数据库Android Java中写入新的整数数据

郎弘业
2023-03-14

从昨天开始,我一直在尝试为我的Firebase数据库添加一个值,我已经尝试了几种方法,但我做不到。

当用户查看一张奖赏卡时,调用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个答案

裴嘉许
2023-03-14

我猜你是想通过事务创建它不存在的字段

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

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) {}
});
}
闽朝
2023-03-14

更改mDatabase。子系统(“用户”)。使用mDatabase的代码中的子项(user.getUid())。子系统(“用户”)。子(user.getUid())。子(“点菜”)它将被创建

 类似资料:
  • 主要内容:设置,更新在本章中,我们将向演示如何将数据保存到Firebase。 设置 方法将写入或替换指定路径上的数据。 让我们创建一个引用收集和设置两个运动员数据信息。 执行上面示例代码,得到以下结果 - 更新 我们可以用类似的方式更新Firebase数据。 注意我们如何使用路径。 执行上面示例代码,得到以下结果 -

  • 我设法将数据插入身份验证,但无法插入数据库: 代码: 错误: E/AndroidRuntime:致命异常:主进程:com。实例budgetingapp,PID:11507 java。lang.RuntimeException:在类androidx上找到了名称getText的冲突获取程序。appcompat。小装置。AppCompativeText位于com。谷歌。火基。消防商店。util。Cust

  • 我正在使用下面的代码将postingdata添加到firebase中。问题是,当我在onComplete中注释finish方法时,我的所有数据都正确写入firebase数据库。但是,当我取消对finish方法的注释时,大多数数据都不是用datbase编写的。我想用finish方法写入完整数据。

  • 我有一个关于firebase实时数据库规则的问题。 有人创建了一个帐户,该帐户在实时数据库中创建了一个路径: 结构很简单(密钥、用户ID和其他数据)。 这是我的规则: 但现在问题来了。如何允许用户写入此对象?每个拥有代码的人(请参阅BQUyhq)w3D)都可以写入对象id。如果没有代码,他们就无法写入对象id。 有可能发生这样的事吗?如果是的话,我该怎么做呢。

  • 当需要从数据库中返回一些数据,然后使用它进行一些计算并将其存储回来时,则需要使用事务性数据。 下面来看看运动员列表中的运动员。 我们要检索属性,添加年龄增加岁并将其返还给Firebase。 从集合中检索年龄,然后可以使用事务方法。 我们将获得当前的年龄,增加一年,并更新集合。 如果运行这个代码,可以看到年龄值更新为。如下图所示 -

  • 主要内容:push()方法,Key属性在上一章中,我们已经演示了如何在Firebase中写入数据。 有时需要有一个唯一的数据标识符。 如果要为数据创建唯一标识符,则需要使用方法而不是方法。 在使用写入功能之前,避免遇到权限问题,建议设置规则为如下 - push()方法 方法将在数据被推送时创建一个唯一的ID。 如果想用前面的章节创建一个具有唯一ID的运动员数据,可以使用下面给出的代码片段。 现在数据看起来有些变化了。该名称将只是一个名