Firebase,不会增加孩子的价值

时间:2017-05-14 08:43:14

标签: android firebase firebase-realtime-database

我正在使用firebase,我已经工作了6个月才能获得所有我需要继续开始构建我自己的应用程序但是我遇到了一个问题,即每次点击它都无法创建按钮增加孩子的价值,EX:当我点击该值为0时,我点击另一次点击该值应为1,依此类推但我不能这样做我已经使用过这些方法,但没有工作,所以我现在要问我的问题的简单答案。

第一种方法:

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

但所有这些都不起作用。

2 个答案:

答案 0 :(得分:1)

当我们谈论增加价值时,我会使用这样的交易重新命令:

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

另一个approch,正如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) {}});

希望它有所帮助,未来的访问者将更好地理解这种解决问题的方法。

答案 1 :(得分:-2)

首先感谢Alex Mamo回答这个问题并且答案很完美,但我找到了一个更好的方法,使用" 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) {}});
希望它有所帮助。