2017-05-14 105 views
0

我正在使用Firebase,並且我已經工作了6個月以獲得所有需要繼續開始構建自己的應用程序的內容,但是我遇到了一個問題,按鈕,每次我點擊它增加孩子的價值,EX:當我點擊的值將是0我點擊另一個點擊值應該是1等等,但我不能這樣做,我已經使用這些方法的下面但沒有任何工作,所以我不得不問現在要得到我的問題的簡單答案。Firebase,不能增加孩子的價值

第一種方法:

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) { 

     } 
    }); 

而第二個:

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

但是所有這些不工作。

+0

嗨,我有這樣一個問題,並指出,如果寫入權限設置不正確的數據庫設置它可能會導致這樣的問題。請檢查權限,並告訴我,如果這項工作 –

+0

不,它不工作的兄弟。 – 7uthaifah

回答

-2

首先感謝亞歷克斯·馬莫爲回答這個問題,答案是完美的,但我通過尋找更好的方式「addListenerForSingleValueEvent」的方法,這裏是我完全方法:

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) {}}); 

希望它幫助。

1

當我們在談論增加值i recomand使用你的交易是這樣的:

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!"); 
     } 
    } 
}); 

另一個計算策略,如後文所述7uthaifah是這樣的:

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) {}}); 

希望它可以幫助和未來visitos將更好地理解這種解決問題的方法。

+0

讓我檢查一下,如果它能正常工作,請稍等一會兒... – 7uthaifah

+0

對不起兄弟它不起作用,它總是給我-1的值只有 – 7uthaifah

+0

如果你得到-1,你的'DatabaseReference'可能是錯誤的。可以發佈你的數據庫結構? –