Firebase的值未更新。

huangapple 未分类评论53阅读模式
英文:

Firebase value not updating

问题

一切正常运行,我认为只有userDataModel.setUserRating(aFloat / (int) dataSnapshot.getChildrenCount());没有提供值。

而且String.valueof(aFloat / (int) dataSnapshot.getChildrenCount()));也提供了正确的值。

FirebaseDatabase.getInstance().getReference().child("Users").child(userDataModel.getUserID()).child("Ratings")
                        .addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                                    userDataModel1 = dataSnapshot.getValue(UserDataModel.class);
                                    aFloat = aFloat + Float.parseFloat(Objects.requireNonNull(dataSnapshot1.getValue()).toString());
                                }
                                userDataModel.setUserRating(aFloat / (int) dataSnapshot.getChildrenCount());
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {

                            }
                        });

UserDataModel

public class UserDataModel {
    float userRating;

    public float getUserRating() {
        return userRating;
    }

    public void setUserRating(float userRating) {
        this.userRating = userRating;
    }
}
英文:

Everything is working fine, I think just userDataModel.setUserRating(aFloat / (int) dataSnapshot.getChildrenCount()); is not giving value.

And String.valueof(aFloat / (int) dataSnapshot.getChildrenCount()));
Is also giving the correct value.

FirebaseDatabase.getInstance().getReference().child("Users").child(userDataModel.getUserID()).child("Ratings")
                        .addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                                    userDataModel1 = dataSnapshot.getValue(UserDataModel.class);
                                    aFloat = aFloat + Float.parseFloat(Objects.requireNonNull(dataSnapshot1.getValue()).toString());
                                }
                                userDataModel.setUserRating(aFloat / (int) dataSnapshot.getChildrenCount());
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {

                            }
                        });

UserDataModel

public class UserDataModel {
    float userRating;

    public float getUserRating() {
        return userRating;
    }

    public void setUserRating(float userRating) {
        this.userRating = userRating;
    }
}

Image URL: https://i.stack.imgur.com/t14Cc.png

答案1

得分: 0

这可能是因为 userDataModel.setUserRating(aFloat / (int) dataSnapshot.getChildrenCount()); 返回了空值,所以您没有得到一个值。

英文:

This is happening maybe because userDataModel.setUserRating(aFloat / (int) dataSnapshot.getChildrenCount()); is returning null so you don't get a value

答案2

得分: 0

代码中的问题在于你的 UserDataModel 有一个名为 userRating 的字段,而在你的数据库中,该属性实际上是一个 uid。这个属性是动态的,因此你不能使用一个普通的 Java 类来表示它。如果你想获取这些评分的值,请尝试以下代码:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ratingsRef = rootRef.child("Users").child(uid).child("Ratings");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            double rating = ds.getValue(Double.class);
            Log.d("TAG", "rating: " + rating);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //不要忽视错误!
    }
};
ratingsRef.addListenerForSingleValueEvent(valueEventListener);

在 logcat 中的输出将会是 Ratings 节点中存在的所有评分值:

3.5
2

现在,你可以使用这些值来计算平均值或者其他你需要的操作。

英文:

The problem in your code us the fact that your UserDataModel has a field named userRating, while in your database the property is actually a uid. This property is dynamic, so you cannot use a POJO class for that. If you want to get the values of those ratings, please try this:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ratingsRef = rootRef.child("Users").child(uid).child("Ratings");
ValueEventListener valueEventListener = new ValueEventListener() {
	@Override
	public void onDataChange(DataSnapshot dataSnapshot) {
		for(DataSnapshot ds : dataSnapshot.getChildren()) {
			double rating = ds.getValue(Double.class);
			Log.d("TAG", "rating: " + rating);
		}
	}

	@Override
	public void onCancelled(@NonNull DatabaseError databaseError) {
		Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
	}
};
ratingsRef.addListenerForSingleValueEvent(valueEventListener);

The output in the logcat will be values of all ratings that exist within the Ratings node.

3.5
2

Now, you can simply make the average or whatever you need with those values.

huangapple
  • 本文由 发表于 2020年5月2日 15:41:27
  • 转载请务必保留本文链接:https://java.coder-hub.com/61555963.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定