RedGod
RedGod

Reputation: 1

I want Firebase Realtime Database to update inside

I have a db like this :

enter image description here

And I want to update value of cityIdealScore to "cityTop*10 + cityWin" in firebase DB automatically but I don't know how to do.

p.s. I need value of cityIealScore to query DB by Score

p.s.2

public void fbWinUpdate(int cityNum) {
    String cNum = String.valueOf(cityNum);
    databaseReference.child(cNum).runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            CityDetails cd = mutableData.getValue(CityDetails.class);
            if(cd == null) {
                return Transaction.success(mutableData);
            }

            cd.cityWin = cd.cityWin + 1;

            mutableData.setValue(cd);
            return Transaction.success(mutableData);
        }

        @Override
        public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
            Log.d("DBError", "postTransaction:onComplete:" + databaseError);
        }
    });
}

public void fbTopUpdate(int cityNum) {
    String cNum = String.valueOf(cityNum);
    databaseReference.child(cNum).runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            CityDetails cd = mutableData.getValue(CityDetails.class);
            if(cd == null) {
                return Transaction.success(mutableData);
            }

            cd.cityTop = cd.cityTop + 1;

            mutableData.setValue(cd);
            return Transaction.success(mutableData);
        }

        @Override
        public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
            Log.d("DBError", "postTransaction:onComplete:" + databaseError);
        }
    });
}

public void fbTop4Update(int cityNum) {
    String cNum = String.valueOf(cityNum);
    databaseReference.child(cNum).runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            CityDetails cd = mutableData.getValue(CityDetails.class);
            if(cd == null) {
                return Transaction.success(mutableData);
            }

            cd.cityTop4 = cd.cityTop4 + 1;

            mutableData.setValue(cd);
            return Transaction.success(mutableData);
        }

        @Override
        public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
            Log.d("DBError", "postTransaction:onComplete:" + databaseError);
        }
    });    }

It's my cityTop, cityWin, cityTop4's update code. I think I can calculate Score in this method, but I think it's ineffective. I wonder that I can calculate Score at FirebaseRules and so on

Upvotes: 0

Views: 53

Answers (1)

Alex Mamo
Alex Mamo

Reputation: 1

This is how you can do it:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("City_Details_Database");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Integer cityTop = ds.child("cityTop").getValue(Integer.class);
            Integer cityWin = ds.child("cityWin").getValue(Integer.class);

            Integer cityIdealScore = cityTop*10 + cityWin;
            dataSnapshot.child("cityIdealScore").getRef().setValue(cityIdealScore);
            Log.d("TAG", valueToUpadate);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
ref.addListenerForSingleValueEvent(eventListener);

Upvotes: 1

Related Questions