Soru & Cevap

FireBase - RealTime Database Veri Güncelleme Sorunu.. ...

30.05.2020 - 03:07

Android Studio ile basit bir uygulama yapmaya çalışıyorum.. Ama bir yerde takıldım ve işin içinden çıkamıyorum.. Sorunum şu . . : Firebase Database den gelen puanın üstüne, son puanı alıp ekleyecek ve eski puanın üstüne yazacak.. Daha basit bir anlatımla..: EskiPuan = 50,, YeniPuan = 75.. GuncelPuan = EskiPuan+YeniPuan .. EskiPuan ı 125 olarak güncelleyecek.. 

 

public void PuanGuncelleme()
    {
        mAuth = FirebaseAuth.getInstance();
        String user_id = mAuth.getCurrentUser().getUid(); 
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Kullanıcılar").child(user_id); 
        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                user_puan = dataSnapshot.child("puan").getValue().toString(); 
                int USERPUAN = Integer.parseInt(user_puan);
                GenelToplam = String.valueOf(USERPUAN + skor);
                Map userUpdateMap = new HashMap();
                userUpdateMap.put("puan", GenelToplam);
            }

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

            }
        });

Bu şekilde bir kod bloğum var ama istediğim gibi çalışmıyor .. OnDataChange referansının in içinde olduğu içinde  sonsuz döngüye girip ben emilatörü durdurana kadar sürekli kayıt yapıyor..  Bu durumu nasıl düzeltebilirim acaba?

13 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user f.erenyucal
f.erenyucal
17.02.2023 - 10:46

 Güncelleme işlemini gerçekleştirmek için, veritabanında bulunan "puan" alanını değiştirmeniz gerekir. ValueEventListener'ın onDataChange() metodu içinde, veri tabanından gelen mevcut puanı alıp, yeni skoru ekledikten sonra, DatabaseReference üzerinden setValue() metodunu kullanarak, veritabanında bu değeri güncelleyebilirsiniz

Aşağıdaki kod, gelen puanı ve yeni skoru toplar ve DatabaseReference üzerinden setValue() metodu ile veritabanında "puan" alanını günceller:

 

public void PuanGuncelleme() {
    mAuth = FirebaseAuth.getInstance();
    String user_id = mAuth.getCurrentUser().getUid(); 
    mDatabase = FirebaseDatabase.getInstance().getReference().child("Kullanıcılar").child(user_id); 
    mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            // Eski puanı al
            user_puan = dataSnapshot.child("puan").getValue().toString(); 
            int USERPUAN = Integer.parseInt(user_puan);
            // Yeni puanı hesapla ve güncelle
            int GenelToplam = USERPUAN + skor;
            mDatabase.child("puan").setValue(String.valueOf(GenelToplam));
        }

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

        }
    });
}