Как суммировать данные и передавать их в Firebase? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть поле в 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 Ответ

1 голос
/ 27 мая 2019

Чтобы записать значение в базу данных реального времени на основе существующего значения, вам необходимо использовать транзакцию .

Основной код вашей транзакции будет выглядеть следующим образом:

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);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...