Reputation: 466
I am using google app engine + firebase database. I need to change some values in firebase database via app engine, but setValue() method does not work. No exceptions sent, i can read data, so service account is working nice. Here is the code im using:
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..
}
}
}
Upvotes: 1
Views: 546
Reputation: 191681
energyObtain = (int) (long) childSnap.child("Character").child("energyObtain").getValue();
And
energyObtain : 20,
Then this just zeros out.
(energyMax * (energyObtain / 100));
So, solution... Make a proper floating point
energyMax * (energyObtain / 100.0)
Upvotes: 4