【发布时间】:2016-12-13 18:39:37
【问题描述】:
我需要在我的 Android 应用中增加每个用户的能量值。
这是我的数据库的方案:
"Users" : {
"NRPdi5gzbsWoHSfovOtIO8XgFjZ2" : {
"Character" : {
energyCurrent : 0,
energyMax : 100,
energyObtain : 20,
and other char values..
}
}
}
我使用此代码阅读、进行一些计算并写入数据,但我的 Firebase 数据库中没有任何变化。此代码位于 Google App Engine 上。没有发送异常,只是没有任何反应。
final FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference ref = db.getReference("Users");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot childSnap : snapshot.getChildren()) {
int energyCurrent;
int energyMax;
int energyObtain;
try {
energyCurrent = (int) childSnap.child("Character").child("energyCurrent").getValue();
energyMax = (int) childSnap.child("Character").child("energyMax").getValue();
energyObtain = (int) childSnap.child("Character").child("energyObtain").getValue();
}
catch (Exception e)
{
continue;
}
float finalEnergy = energyCurrent + (energyMax * (energyObtain/100));
if (finalEnergy > energyMax){
DatabaseReference reference = childSnap.getRef().child("Character").child("energyCurrent");
reference.setValue(energyMax, new DatabaseReference.CompletionListener() {
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
throw databaseError.toException();
}
});
}
else
{
DatabaseReference reference = childSnap.getRef().child("Character").child("energyCurrent");
reference.setValue((int)finalEnergy, new DatabaseReference.CompletionListener() {
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
throw databaseError.toException();
}
});
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
【问题讨论】:
-
您使用的是 Admin SDK 吗?您是否创建了服务帐户并将其用于authenticate your server?
-
您忽略了
onCanclled()可能报告的问题。抓住他们throw databaseError.toException()。见stackoverflow.com/documentation/firebase/5548/… -
@FrankvanPuffelen 没有抛出异常。
标签: android google-app-engine firebase firebase-realtime-database