【发布时间】: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