Maxgmer
Maxgmer

Reputation: 466

Firebase database cant write data

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

Answers (1)

OneCricketeer
OneCricketeer

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

Related Questions