Firebase中的Android工作室增值

时间:2017-08-03 06:58:35

标签: android firebase increment

当我点击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++);
            }

3 个答案:

答案 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)

  1. 从数据库获取值。
  2. 使用所需的增量数量使一个简单的while循环。全局声明变量,而不是在onCreate方法中声明。
  3. 将它们设置回数据库。

答案 2 :(得分:0)

如果使用ServerValue.increment(),则无需检索该值。最近,它以firebase_database 4.1版本降落在Flutter上。

您可以使用的方式是:

mRefChild.set(ServerValue.increment(1));