如何汇总数据并将其传输到Firebase?

时间:2019-05-27 10:09:24

标签: java android firebase firebase-realtime-database

我在Firebase中有一个字段:balance。我需要的是一个人输入总和100之后,该字段将值更改为100。然后,当该人输入50的总和时,该字段值将变为150

如何在客户端上编写处理逻辑?数据汇总。我认为这太简单了,但我需要您的帮助!

    mDatabaseUsers.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String user_id = mAuth.getCurrentUser().getUid();

            String balance = dataSnapshot.child(user_id).child("Balance").getValue(String.class);

            mCountPayment.setText(balance + " ₽");
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    mPaymentButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            paymentIntent();
        }
    });
}

private void paymentIntent() {


    final String user_id = mAuth.getCurrentUser().getUid();

    final String count = mPaymentList.getText().toString().trim();

    if (!TextUtils.isEmpty(count)) {


        mDatabaseUsers.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                mDatabaseUsers.child(user_id).child("Balance").setValue(count);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
            }
        }

1 个答案:

答案 0 :(得分:1)

要基于现有值将值写入实时数据库,您将需要use a transaction

您交易的基本代码如下:

DatabaseReference balanceRef = FirebaseDatabase.getInstance().getReference("/Users/"+ user_id +"/Balance");
Long delta = 50l;
balanceRef.runTransaction(new Transaction.Handler() {
    @Override
    public Transaction.Result doTransaction(MutableData mutableData) {
        Long balance = mutableData.getValue(Long.class);
        if (balance == null) {
            mutableData.setValue(delta);
        }
        else {
            Long amount = mutableData.getValue(Long.class);
            amount = amount + delta;
            mutableData.setValue(amount);
        }
        return Transaction.success(mutableData);
    }

    @Override
    public void onComplete(DatabaseError databaseError, boolean b,
                           DataSnapshot dataSnapshot) {
        // Transaction completed
        Log.d(TAG, "balanceTransaction:onComplete:" + databaseError);
    }
});