Значение Firebase не обновляется - PullRequest
0 голосов
/ 02 мая 2020

Все работает нормально, я думаю, что userDataModel.setUserRating(aFloat / (int) dataSnapshot.getChildrenCount()); не дает значения.

И String.valueof(aFloat / (int) dataSnapshot.getChildrenCount())); также дает правильное значение.

FirebaseDatabase.getInstance().getReference().child("Users").child(userDataModel.getUserID()).child("Ratings")
                        .addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                                    userDataModel1 = dataSnapshot.getValue(UserDataModel.class);
                                    aFloat = aFloat + Float.parseFloat(Objects.requireNonNull(dataSnapshot1.getValue()).toString());
                                }
                                userDataModel.setUserRating(aFloat / (int) dataSnapshot.getChildrenCount());
                            }

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

                            }
                        });

UserDataModel

public class UserDataModel {
    float userRating;

    public float getUserRating() {
        return userRating;
    }

    public void setUserRating(float userRating) {
        this.userRating = userRating;
    }
}

URL изображения: https://i.stack.imgur.com/t14Cc.png

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Проблема в вашем коде заключается в том, что в вашем UserDataModel есть поле с именем userRating, а в вашей базе данных это свойство на самом деле uid. Это свойство Dynami c, поэтому вы не можете использовать класс POJO для этого. Если вы хотите получить значения этих оценок, попробуйте следующее:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ratingsRef = rootRef.child("Users").child(uid).child("Ratings");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            double rating = ds.getValue(Double.class);
            Log.d("TAG", "rating: " + rating);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
ratingsRef.addListenerForSingleValueEvent(valueEventListener);

Выводом в logcat будут значения всех оценок, которые существуют в узле Ratings.

3.5
2

Теперь с этими значениями вы можете просто сделать среднее или все, что вам нужно.

0 голосов
/ 02 мая 2020

Возможно, это происходит потому, что userDataModel.setUserRating(aFloat / (int) dataSnapshot.getChildrenCount()); возвращает ноль, поэтому вы не получите значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...