Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从firebase获取数据,然后将其推回_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 如何从firebase获取数据,然后将其推回

Android 如何从firebase获取数据,然后将其推回,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我坚持从firebase获取数据,然后在一些更改后将其推回 下面给出的代码解决了一些问题,因为我需要获取int并将其和另一个值的和推送到实时数据库一次,但它推了多次,在上一次之后,它超过了39K行,除了1 private DatabaseReference ratingReference = FirebaseDatabase.getInstance().getReference().child(Consts.RATING_DB); public void setRating(String

我坚持从firebase获取数据,然后在一些更改后将其推回

下面给出的代码解决了一些问题,因为我需要获取int并将其和另一个值的和推送到实时数据库一次,但它推了多次,在上一次之后,它超过了39K行,除了1

private DatabaseReference ratingReference =  FirebaseDatabase.getInstance().getReference().child(Consts.RATING_DB);

 public void setRating(String uid, int addPoint) {
        ratingReference.child(uid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                int rating = 0;
                if (dataSnapshot.child(Consts.RATING).getValue() != null) {
                    rating = Integer.valueOf(dataSnapshot.child(Consts.RATING).getValue().toString());
                }
                DatabaseReference ref =  ratingReference.child(getUid()).push();
                Map<String, Object> ratingMap = new HashMap<>();
                ratingMap.put("rating", rating + addPoint);
                ref.updateChildren(ratingMap);
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {}
        });
    }
private DatabaseReference ratingReference=FirebaseDatabase.getInstance().getReference().child(Consts.RATING_DB);
公共无效设置值(字符串uid,int addPoint){
ratingReference.child(uid).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
内部评级=0;
if(dataSnapshot.child(Consts.RATING).getValue()!=null){
rating=Integer.valueOf(dataSnapshot.child(Consts.rating).getValue().toString());
}
databasereferef=ratingReference.child(getUid()).push();
Map ratingMap=新HashMap();
评级图。放置(“评级”,评级+添加点);
参考更新儿童(评级图);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){}
});
}

如果您能帮助我,我将非常感激。

假设
常量评级
包含一个与
评级
类似的字符串值,并且此属性的类型为数字字符串,将
添加点
的值添加到现有的
评级
值中,请使用以下代码行:

ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        long rating = 0;

        if(dataSnapshot.child(Consts.RATING).exists()) {
            rating = dataSnapshot.child(Consts.RATING).getValue(Long.class);
            long newValue = rating + addPoint;
            dataSnapshot.child(Consts.RATING).getRef().setValue(newValue);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
ratingReference.child(uid).addListenerForSingleValueEvent(valueEventListener);

正如您所见,没有必要使用任何
push()
调用。

@AndréKool不,它不会。请看一下我的代码。我已经使用了
addListenerForSingleValueEvent
。对不起,我的错误您好!是的,它正在工作!谢谢你的帮助!很抱歉我久违了。