为什么我不能从Firebase数据库读取数据?

时间:2019-06-21 07:12:01

标签: android firebase firebase-realtime-database

我是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 :(得分:0)

更改以下内容:

            @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的数据。