如何使用firebase事务更新数据?

时间:2018-03-13 08:42:15

标签: java android firebase firebase-realtime-database transactions

我遇到了如何准确使用Firebase Transaction runTransaction()方法的问题。在这里,当用户单击按钮时,我试图从数据库中获取值并将其递增,然后再将其发送回数据库。现在问题是如果多个用户同时点击按钮,为此我使用的是Firebase事务。但是不知道如何编写代码。这是我尝试但不工作的代码。我只想将值从0更新为1,如果只有一个用户点击按钮,并且如果许多用户同时点击,则其中一个用户应该等到第一个用户完成更新。

myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(final DataSnapshot dataSnapshot) {
            final String mainValue = (String) dataSnapshot.child("values").child("number").getValue();

            btnInc.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    myRef.runTransaction(new Transaction.Handler() {
                        @Override
                        public Transaction.Result doTransaction(final MutableData mutableData) {
                            mutableData.child("number").setValue(String.valueOf(Integer.parseInt(mainValue) + 1));
                            return Transaction.success(mutableData);
                        }

                        @Override
                        public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {

                            Toast.makeText(MainActivity.this, "Result: "+b, Toast.LENGTH_SHORT).show();

                            Toast.makeText(MainActivity.this, "Error: "+databaseError.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            });
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });

enter image description here

Here is my database screenshot

0 个答案:

没有答案