当我点击Android Studio App时,有人可以教我如何更新我的Firebase值吗?无需检索和显示数据。只是我的Firebase中的增量值。例如,Firebase计数器值现在为0,当我点击按钮时,如何在Firebase中增加计数器值?我尝试使用下面的代码,但它无法正常工作。
import com.firebase.client.Firebase;
public class Voting extends AppCompatActivity {
private Button msendData;
int counter;
private Firebase mRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_voting);
Firebase.setAndroidContext(this);
mRef = new Firebase("https://lollol.firebaseio.com/");
msendData = (Button) findViewById(R.id.votethis);
msendData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Firebase mRefChild = mRef.child("Booth A");
mRefChild.setValue(counter++);
}
答案 0 :(得分:2)
为了增加Firebase数据库中的值,首先,您需要检索该值。在不知道的情况下无法增加值。为此,我绝对建议您使用Firebase Transaction。
让我们举个例子。让我们假设我们想要增加一个计数器。为此,请使用以下代码设置计数器的默认值。
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.child("score").setValue(1);
假设score
字段的类型为Integer,要使用事务,请使用以下方法:
public static void setScore(String operation) {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference scoreRef = rootRef.child("score");
scoreRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Integer score = mutableData.getValue(Integer.class);
if (score == null) {
return Transaction.success(mutableData);
}
if (operation.equals("increaseScore")) {
mutableData.setValue(score + 1);
} else if (operation.equals("decreaseScore")){
mutableData.setValue(score - 1);
}
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {}
});
}
使用transactions
,如果用户试图同时增加/减少分数,您将避免不一致的结果。因此,作为结论,请相应地调用此方法来增加/减少操作。
如果您想阅读分数,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference scoreRef = rootRef.child("score");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Integer score = dataSnapshot.getValue(Integer.class);
Log.d("TAG", "score: " + score);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
scoreRef.addListenerForSingleValueEvent(eventListener);
答案 1 :(得分:0)
答案 2 :(得分:0)
如果使用ServerValue.increment(),则无需检索该值。最近,它以firebase_database 4.1版本降落在Flutter上。
您可以使用的方式是:
mRefChild.set(ServerValue.increment(1));