Saya menggunakan basis data waktu nyata. Dalam beberapa pengguna akan memberikan set data yang sama seperti yang ditunjukkan pada Snapshot1. Setiap kali pengguna yang sama mengirimkan kumpulan data lain, itu memperbarui catatan lama tetapi saya ingin menambahkan sebagai catatan baru seperti satu pengguna dapat menyimpan beberapa kumpulan data seperti di Snapshot2.

Kode saya adalah:

   Contribution cont = new Contribution(money, month, payment, date, tref, rem);
        FirebaseDatabase.getInstance().getReference("Contribution")
                .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                .setValue(cont).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Toast.makeText(ContributionDeclarationForm.this, "Successfully Submitted", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(ContributionDeclarationForm.this, DashboardActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(ContributionDeclarationForm.this, "Not Submitted", Toast.LENGTH_LONG).show();
            }
        });

Terima kasih sebelumnya.

Cuplikan1:

Snapshot1

Cuplikan2:

Snapshot2

2
Gokul 11 Mei 2021, 10:38

2 jawaban

Jawaban Terbaik

Untuk mencapainya, Anda cukup menggunakan push() metode, yang:

Membuat referensi ke lokasi turunan yang dibuat secara otomatis.

Jadi sesuatu seperti:

FirebaseDatabase.getInstance().getReference("Contribution")
        .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
        .push().setValue(cont).addOnCompleteListener(new OnCompleteListener<Void>() {
    ...

Ini berarti Anda akan mendapatkan kunci unik untuk setiap anak di bawah (Contribution/$uid). Jadi skema baru Anda akan terlihat seperti ini:

Firebase-root
  |
  --- Contribution
        |
        --- $uid
             |
             --- $pushedId
                    |
                    --- Amount: "369"
                    |
                    --- Contribution_Month: "5-2025"
                    |
                    --- //Other properties

Jika Anda ingin mendapatkan semua anak dari satu pengguna, Anda perlu menggunakan referensi yang menunjuk ke UID dan mengulang hasil seperti pada baris kode berikut:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Contribution").child(uid);
uidRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            for (DataSnapshot ds : task.getResult().getChildren()) {
                String amount = task.getResult().child("Amount").getValue(String.class);
                Log.d("TAG", amount);
            }
        } else {
            Log.d(TAG, task.getException().getMessage()); //Don't ignore potential errors!
        }
    }
});

Hasil di logcat akan menjadi "jumlah" dari setiap anak yang ada di bawah referensi di atas.

Jika Anda membutuhkan angka, sebaiknya simpan dalam database sebagai angka dan bukan sebagai nilai String.

2
Frank van Puffelen 11 Mei 2021, 14:04

Final Output

Untuk ini saya mendapat solusi dan solusi saya adalah:

// Declared in globally
DatabaseReference ref;
Contribution cont;
//declared inside a method
cont = new Contribution();
        ref = FirebaseDatabase.getInstance().getReference("Contribution")
                .child(FirebaseAuth.getInstance().getCurrentUser().getUid());
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if (snapshot.exists()){
                    snapshot.getChildrenCount();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

        cont.setAmount(money);
        cont.setContribution_Month(month);
        cont.setMode_Of_Payment(payment);
        cont.setTransaction_Date(date);
        cont.setTransaction_RefNo(tref);
        cont.setRemarks(rem);

        ref.child(month).push().setValue(cont);
        Toast.makeText(ContributionDeclarationFormActivity.this, "Successfully Submitted", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(ContributionDeclarationFormActivity.this, DashboardActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
0
Gokul 12 Mei 2021, 14:28