我对为什么它没有增加感到困惑。实际上,我正在制作一个投票面板,用户可以在其中进行投票,并且可以通过投票增加数据库。但这不会发生。
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;然后它仅增加一次,而没有增加。
答案 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);
}