为什么价值没有增加int Firebase数据库

时间:2019-08-15 10:20:23

标签: java android firebase firebase-realtime-database

我对为什么它没有增加感到困惑。实际上,我正在制作一个投票面板,用户可以在其中进行投票,并且可以通过投票增加数据库。但这不会发生。

int votes=0;

public void voteit(String party){
    final int[] v = {0};
    allpoliticalparty= FirebaseDatabase.getInstance().getReference().child("votes");
    allpoliticalparty.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String value = dataSnapshot.getValue(String.class);
            v[0] =Integer.parseInt(value)+1;
        }
        @Override
        public void onCancelled(DatabaseError error) {
        }
    });
        votes=v[0]++;
    allpoliticalparty.setValue("" + votes);
}

我也尝试过静态int选票= 0;然后它仅增加一次,而没有增加。

3 个答案:

答案 0 :(得分:2)

这不是增加价值的正确方法。因为我们正在开发可在多用户环境中使用的应用程序,所以您应该考虑使用事务。请查看以下方法,它将帮助您增加/减少votes属性的值:

public static void setVotes(String operation) {
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference votesRef = rootRef.child("votes");
    votesRef.runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            Integer votes = mutableData.getValue(Integer.class);
            if (votes == null) {
                return Transaction.success(mutableData);
            }

            if (operation.equals("increaseScore")) {
                mutableData.setValue(votes + 1);
            } else if (operation.equals("decreaseScore")){
                mutableData.setValue(votes - 1);
            }

            return Transaction.success(mutableData);
        }

        @Override
        public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {}
    });
}

然后用:

setScore("increaseScore");

有关更多信息,请查看有关saving data as transactions的官方文档。

答案 1 :(得分:1)

我认为您一直在检索相同的号码,因为您从未更新过它。

答案 2 :(得分:0)

这是一个简单的更新示例。

private void writeNewPost(String userId, String username, String title, String 
 body) {
// Create new post at /user-posts/$userid/$postid and at
// /posts/$postid simultaneously
String key = mDatabase.child("posts").push().getKey();
Post post = new Post(userId, username, title, body);
Map<String, Object> postValues = post.toMap();

Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/posts/" + key, postValues);
childUpdates.put("/user-posts/" + userId + "/" + key, postValues);

mDatabase.updateChildren(childUpdates);
}