Firebase中的Android Studio价值增加 [英] Android studio value increment in Firebase

查看:73
本文介绍了Firebase中的Android Studio价值增加的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我单击Android Studio应用程序时,有人可以教我如何更新Firebase值吗?无需检索和显示数据.我的Firebase只是价值的增量.例如,Firebase计数器值现在为0,单击按钮时如何在Firebase中增加计数器值?我尝试使用下面的代码,但无法正常工作.

Can anyone teach me how to update my Firebase value when I click on my Android Studio App? There is no need to retrieve and display the data. Just an incremental of value in my Firebase. For example, the Firebase counter value is 0 now, how I can increase the counter value in Firebase when I click on a button? I have tried using the code below, but it is not working.

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++);
            }

推荐答案

要在Firebase数据库中增加值,首先,您需要检索该值.在不知道的情况下无法增加值.为此,我绝对建议您使用 Firebase交易.

In order to increment a value in a Firebase database, first of all, you need to retrieve that value. There is no way to increment a value without knowing it. To achieve this, I definitely recommend you to use Firebase Transaction.

让我们举个例子.假设我们要增加一个计数器.为此,请使用以下代码设置计数器的默认值.

Let's take an example. Let's assume we want to increment a counter. In order to achieve this, please use the following code to set the default value of the counter.

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.child("score").setValue(1);

假设score字段的类型为Integer,要使用事务,请使用以下方法:

Assuming that the score field is of type Integer, to use transactions, please use the following method:

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,如果用户试图同时增加/减少分数,则可以避免结果不一致.因此,作为结论,请根据您的增加/减少操作调用此方法.

Using transactions, you will avoid inconsistent results if users are trying to increase/decrease the score at the same time. So as a conclusion, call this method accordingly to your increase/decrease operation.

如果您想阅读分数,请使用以下代码:

If you want to read the score, please use the following code:

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);

这篇关于Firebase中的Android Studio价值增加的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆