gpt4 book ai didi

java - Firebase 中的 Android Studio 值(value)增量

转载 作者:行者123 更新时间:2023-11-29 19:10:38 24 4
gpt4 key购买 nike

谁能教我如何在我点击我的 Android Studio 应用程序时更新我的​​ 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++);
}

最佳答案

编辑:20222608

实际上,现在有一个非常简单的解决方案,我们可以在实时数据库中增加一个字段:

scoreRef.setValue(ServerValue.increment(1));

要减少一个值,只需传递一个负数:

scoreRef.setValue(ServerValue.increment(-1));

为了增加 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);

关于java - Firebase 中的 Android Studio 值(value)增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45477000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com