2016-12-21 4 views
1

Ich benutze Google App Engine + Firebase-Datenbank. Ich muss einige Werte in Firebase-Datenbank über App-Engine ändern, aber setValue() -Methode funktioniert nicht. Keine Ausnahmen gesendet, ich kann Daten lesen, so Dienstkonto funktioniert gut. Hier ist der Code im mit:Firebase-Datenbank kann keine Daten schreiben

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.. 
      } 
     } 
    } 
+2

einige Haltepunkte setzen? –

+0

@ cricket_007 ich denke nein, weil ich nicht weiß, was das ist.) – Maxgmer

+0

@ cricket_007 wenn du fortfährst, break ot etw so, dann nein, ich habe es nicht verwendet. – Maxgmer

Antwort

3
energyObtain = (int) (long) childSnap.child("Character").child("energyObtain").getValue(); 

Und

energyObtain : 20, 

Dann einfach diese Nullen. So

(energyMax * (energyObtain/100)); 

, Lösung ... Machen Sie eine richtige Gleitkomma

energyMax * (energyObtain/100.0) 
+0

Danke, es hat funktioniert, aber ich kann nicht verstehen, warum, kannst du einen Link für das Thema geben, das das beschreiben kann? Oder nur in wenigen Worten, bitte)) – Maxgmer

+0

Du hast eine ganze Zahl abgeschnitten. Ganzzahlige Teilung? http://stackoverflow.com/questions/3144610/integer-division-how-do-you-produce-a-double –

+0

Es ist ein Java-Problem. Nicht verwandt mit Firebase überhaupt –