首页 > 解决方案 > 无法在 Firebase 上为特定用户增加孩子的价值

问题描述

我有一个用于登录用户的按钮。当登录用户单击该按钮时,我想为该特定用户增加一个特定值。现在我正在使用下面的代码,但它会在 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!");
        }
    }
});

数据库:

数据库图片

我现在能做什么?

标签: androidfirebasefirebase-realtime-database

解决方案


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:此侦听器可帮助您检测特定路径(包括该特定路径的子路径)处数据的变化。此侦听器仅侦听一次,并根据更改为您提供数据,直到触发此事件。


推荐阅读