无法在特定用户的Firebase上增加子项的值

时间:2018-05-20 08:57:01

标签: android firebase firebase-realtime-database

我有一个登录用户的按钮。当登录用户单击该按钮时,我想为该特定用户增加特定值。现在我使用以下代码,但它在Firebase数据库中创建了一个子项并增加了数据。我希望它应该增加特定(登录)用户子(“点”)数据。

myRef.child("points").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!");
        }
    }
});

数据库:

Image of database

我现在能做什么?

1 个答案:

答案 0 :(得分:0)

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
user.addListenerForSingleValueEvent(new ValueEventListener() {
       @Override
       public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.hasChild("points")) {
              if (dataSnapshot.getValue() == null) {
              dataSnapshot.setValue("0");
             } else {
            String stringValue = (String) dataSnapshot.getValue();
            int intValue = Integer.parseInt(stringValue);
            int increasedIntValue = intValue + 1;
            dataSnapshot.setValue(String.valueOf(increasedIntValue));
}}

        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });

addListenerForSingleValueEvent:此侦听器可帮助您检测特定路径(包括该特定路径上的子项)的数据更改。此侦听器只侦听一次,并根据更改为您提供数据,直到触发此事件。