2017-05-14 6 views
0
erhöhen

Ich benutze firebase und ich habe Arbeit für 6 Monate, um alles zu bekommen, was ich brauche, um zu beginnen, meine eigenen apps zu bauen, aber ich hatte ein Problem, das ich nicht machen konnte Knopf, dass jedes Mal, wenn ich darauf klicke, den Wert von Kind erhöhen, EX: Wenn ich klicke, wird der Wert 0 sein. Ich klicke auf einen anderen Klick, der Wert sollte 1 sein usw. Ich konnte das nicht tun nichts funktioniert, also muss ich jetzt fragen, um die einfache Antwort für meine Frage zu bekommen.Firebase, kann nicht Wert von Kind

Die erste Methode:

mDatabase.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Long Value = (Long) dataSnapshot.child("Rank").getValue(); 
      mDatabase.child("Rank").setValue(Value+1); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

Und die zweite:

mDatabase.child("Rank").setValue(+1);

Aber alle diese funktioniert nicht.

+0

Hallo, ich hatte solch ein Problem und bemerkte, dass, wenn die Schreibrechte in den Datenbankeinstellungen nicht gut eingestellt sind, es zu einem solchen Problem führen könnte. Bitte überprüfen Sie die Berechtigungen und sagen Sie mir, ob das funktioniert –

+0

Nein, es funktioniert nicht Bruder. – 7uthaifah

Antwort

-2

Erstens Dank für Alex Mamo für die Beantwortung der Frage und die Antwort war perfekt, aber ich finde, eine bessere Art und Weise unter Verwendung von „addListenerForSingleValueEvent“ Methode hier ist meine voll Methode:

mDatabaseMostActive.child("Rank").addListenerForSingleValueEvent(new ValueEventListener() { 
           @Override 
           public void onDataChange(DataSnapshot dataSnapshot) { 
            Long Num =(Long) dataSnapshot.getValue(); 
            Long NumAfter = Num+1; 
            dataSnapshot.getRef().setValue(NumAfter);} 
           @Override 
           public void onCancelled(DatabaseError databaseError) {}}); 

hoffe, es hilft.

1

Wenn wir sprechen über einen Wert zu erhöhen i recomand Sie Transaktionen wie folgt aus:

mDatabase.child("Rank").runTransaction(new Transaction.Handler() { 
    @Override 
    public Transaction.Result doTransaction(final MutableData currentData) { 
    if (currentData.getValue() == null) { 
     currentData.setValue("0"); 
    } else { 
     String stringValue = (String) currentData.getValue(); 
     int intValue = Integer.parseInt(stringValue); 
     int increasedIntValue = intValue + 1; 
     currentData.setValue(String.valueOf(increasedIntValue)); 
    } 
     return Transaction.success(currentData); 
    } 

    @Override 
    public void onComplete(DatabaseError databaseError, boolean committed, DataSnapshot currentData) { 
     if (databaseError != null) { 
      System.out.println("Firebase counter increment failed!"); 
     } else { 
      System.out.println("Firebase counter increment succeeded!"); 
     } 
    } 
}); 

Ein weiterer approch, wie 7uthaifah später erwähnt ist dies:

mDatabaseMostActive.child("Rank").addListenerForSingleValueEvent(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    Long Num =(Long) dataSnapshot.getValue(); 
    Long NumAfter = Num+1; 
    dataSnapshot.getRef().setValue(NumAfter);} 
@Override 
public void onCancelled(DatabaseError databaseError) {}}); 

Hoffe, es hilft und Zukunft visitos wird diese Art der Lösung des Problems besser verstehen.

+0

Lassen Sie mich überprüfen, ob es funktioniert, bitte ein wenig warten ... – 7uthaifah

+0

Sorry Bruder es funktioniert nicht immer geben Sie mir -1 Wert nur – 7uthaifah

+0

Wenn Sie -1 erhalten, könnte Ihre 'DatabaseReference' falsch sein. Kann ich Ihre Datenbankstruktur posten? –