Почему я не могу прочитать данные из базы данных Firebase? - PullRequest
0 голосов
/ 21 июня 2019

Я новичок в Firebase, и я не понимаю, почему я не могу получить данные в tMAX и тех же переменных (tMAX всегда возвращает как 0.0 и так же, как 0). Я перепробовал много вещей, которые нашел, но со всеми из них я получаю тот же результат при отладке. Что я делаю неправильно? Это правильный способ чтения из базы данных? Я что-то пропустил?

Strings.java - здесь я читаю

public class Settings {
    double tMAX;
    int NumNodes;
    int LastNode;
    int Source;
    int same;

    DatabaseReference mFirebaseDatabase;
    FirebaseDatabase mFirebaseInstance;
    String userID;
    public Settings()  {
        mFirebaseInstance=FirebaseDatabase.getInstance();
        userID= FirebaseAuth.getInstance().getCurrentUser().getUid();
        mFirebaseDatabase=mFirebaseInstance.getReference().child("user").child(userID).child("1");
        mFirebaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NotNull DataSnapshot snapshot) {
                for(DataSnapshot snapshot1: snapshot.getChildren()){
                    if(snapshot != null){
                        User user = snapshot1.getValue(User.class);
                        if(user != null){
                            tMAX = user.getDuration();
                        }
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.e("Settings", "loadPost:onCancelled", databaseError.toException());
            }
        });

        NumNodes=31;

        mFirebaseDatabase.child("2").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NotNull DataSnapshot snapshot) {
                for(DataSnapshot snapshot1: snapshot.getChildren()){
                    if(snapshot != null){
                        User2 user = snapshot1.getValue(User2.class);
                        if(user != null){
                            same=user.getSourceDestination().get(0);
                            if(same==1){
                                NumNodes+=1;
                                Source=0;
                                LastNode=0;
                            }
                            else{
                                NumNodes+=2;
                                Source=0;
                                LastNode=32;
                            }
                        }
                    }
                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.e("Settings", "loadPost:onCancelled", databaseError.toException());
            }
        });

    }
}

А вот так выглядит моя база данных https://imgur.com/a/5HTHsfT

1 Ответ

0 голосов
/ 21 июня 2019

Измените следующее:

            @Override
            public void onDataChange(@NotNull DataSnapshot snapshot) {
                for(DataSnapshot snapshot1: snapshot.getChildren()){
                    if(snapshot != null){
                        User user = snapshot1.getValue(User.class);
                        if(user != null){
                            tMAX = user.getDuration();
                        }
                    }
                }

на это:

            @Override
            public void onDataChange(@NotNull DataSnapshot snapshot) {
                    if(snapshot.exists()){
                        User user = snapshot.getValue(User.class);
                        tMAX      = user.getDuration();
                    }
                }

Сначала вам нужно использовать метод exists(), чтобы проверить, есть ли данные в этом месте.Во-вторых, вы не должны выполнять итерации внутри снимка, так как вы используете класс POJO.Когда вы выполняете итерацию, вы получаете данные типа String, а не типа User.

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