【问题标题】:Firebase database cant write dataFirebase数据库无法写入数据
【发布时间】:2017-05-07 00:49:42
【问题描述】:

我正在使用谷歌应用引擎 + firebase 数据库。我需要通过应用引擎更改 firebase 数据库中的一些值,但 setValue() 方法不起作用。没有发送异常,我可以读取数据,所以服务帐户运行良好。 这是我使用的代码:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users");

  ref.addListenerForSingleValueEvent(new ValueEventListener() {
     @Override
        public void onDataChange(DataSnapshot snapshot)
        {
            if (snapshot.exists())
            {
                for (DataSnapshot childSnap : snapshot.getChildren()) {
                    if (childSnap.child("Character").exists()) {
                        int energyCurrent;
                        int energyMax;
                        int energyObtain;
                        energyCurrent = (int) (long) childSnap.child("Character").child("energyCurrent").getValue();
                        energyMax = (int) (long) childSnap.child("Character").child("energyMax").getValue();
                        energyObtain = (int) (long) childSnap.child("Character").child("energyObtain").getValue();

                        float finalEnergy = energyCurrent + (energyMax * (energyObtain / 100));
                        if (finalEnergy > energyMax) {
                            childSnap.getRef().child("Character").child("energyCurrent").setValue(energyMax, new DatabaseReference.CompletionListener() {
                                public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                                    if (databaseError != null) { throw databaseError.toException(); }
                                }
                            });
                        } else {
                            childSnap.getRef().child("Character").child("energyCurrent").setValue((int) finalEnergy, new DatabaseReference.CompletionListener() {
                                public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                                    if (databaseError != null) { throw databaseError.toException(); }
                                }
                            });
                        }
                    }
                }
            }
}

Here is the scheme of my database if u need it:

    "Users" : {
        "NRPdi5gaaaaaHSfovegwg8XgFjZ2" : {
          "Character" : {
            energyCurrent : 0,
            energyMax : 100,
            energyObtain : 20,
            and other char values..
          }
        }
    } 

【问题讨论】:

  • 设置一些断点?
  • @cricket_007 我认为没有,因为我不知道那是什么。)
  • @cricket_007 如果你的意思是继续,像那样打破其他东西,那么不,我没有使用它。
  • 断点。代码中可以暂停和调试应用程序的点。如果没有,只需将 else 语句添加到所有 if 语句并打印任何内容,因为如果什么都没发生,它显然不会输入其中一个
  • @cricket_007 代替了 setValue 监听器,我放置了 else 并且 else 块已完成,这意味着 databaseError==null,这意味着一切正常并且 setValue 已执行。 wtf?)

标签: java firebase firebase-realtime-database


【解决方案1】:
energyObtain = (int) (long) childSnap.child("Character").child("energyObtain").getValue();

还有

energyObtain : 20,

然后这只是归零。

(energyMax * (energyObtain / 100));

所以,解决方案...做一个合适的浮点数

energyMax * (energyObtain / 100.0)

【讨论】:

  • 谢谢,它成功了,但我不明白为什么,你能给一个可以描述这个主题的链接吗?或者请您自己说几句话))
  • 您截断了一个整数。整数除法? stackoverflow.com/questions/3144610/…
  • 这是一个 Java 问题。与 Firebase 完全无关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 2018-05-08
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
相关资源
最近更新 更多