【问题标题】:Why can't I read data from Firebase database?为什么我无法从 Firebase 数据库中读取数据?
【发布时间】:2019-06-21 07:12:01
【问题描述】:

我是 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

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    更改以下内容:

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

    【讨论】:

    • 我之前也是这样,结果一样
    • 然后这样做:@Override public void onDataChange(@NotNull DataSnapshot snapshot) { if(snapshot.exists()){ Double duration = Double.parseDouble(snapshot.child("duration").getValue(String.class)); } }
    • 我应该添加 tMAX=duration,或者如何从 duration 中获取值?
    • 是的,添加 tMAX = duration 或直接添加 tMAX = Double.parseDouble(snapshot.child("duration").getValue(String.class));
    • 你的数据库规则是什么?
    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多