【问题标题】:I'm not able to get data from a Firebase database我无法从 Firebase 数据库中获取数据
【发布时间】:2017-03-27 06:05:04
【问题描述】:

我将 Firebase 用于 Android 项目,它在将数据推送到服务器时运行良好,但在检索数据时,我什么也得不到。

这是我的火力基地的结构

这是我从 Firebase 中检索数据的代码

mRef.child("User").addValueEventListener(new ValueEventListener() {
         @Override
         public void onDataChange(DataSnapshot dataSnapshot) {

             counter = dataSnapshot.getChildrenCount();
             for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                 post = postSnapshot.getValue(SettersGetters.class);
                 nicuNames.add(post.getNicuName());
                 nicuAddresses.add(post.getNicuAddress());
                 niucCount.add(post.getNicuCount());
                 nicuPrices.add(post.getNicuCount());
                 nicuPhones.add(post.getNicuPhone());
                 nicuUpdate.add(post.getNicuUpdate());
                 nicuLat.add(post.getNicuLat());
                 nicuLng.add(post.getNicuLng());
                 nicuDes.add(post.getNicuDesc());
                 a++;
                 Toast.makeText(MapsActivity.this,"jhkjhk", Toast.LENGTH_LONG).show();
                 System.out.println(nicuNames.get(0));
             }
             //Toast.makeText(MapsActivity.this,"jhkjhk" + a, Toast.LENGTH_LONG).show();
         }

         @Override
         public void onCancelled(DatabaseError databaseError) {

         }

     });

在制作 Toast 以至少打印 Children 的数量时,它每次都返回 0

Toast.makeText(MapsActivity.this,a+"",Toast.LENGTH_SHORT).show();

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    您想监听 User 键的子事件,而不是值事件。

    替换

    mRef.child("User").addValueEventListener(new ValueEventListener() {
    

    mRef.child("User").addChildEventListener(new ChildEventListener() {
    

    然后,实施

    • onChildAdded(DataSnapshot snapshot, String previousChildName)

    • onChildChanged(DataSnapshot snapshot, String previousChildName)

    从那里,您将 DataSnapshot 映射到(最好比命名更好的类)SettersGetters.class

    【讨论】:

    • 你在使用 FirebaseRecyclerView 吗?
    • 如果必须的话我会,但我从来没有用过,没有。
    • 使用firebaseRecycler查看它非常易于使用,因为它包含了所有这些功能。检查此链接 - github.com/firebase/FirebaseUI-Android
    • 我知道它是什么......我只是不需要它,所以请停止宣传它
    【解决方案2】:

    试试这个

    mRef.child("User").child("Kfx7408plvgugiMR1Se").addValueEventListener(new ValueEventListener(){
             @Override
             public void onDataChange(DataSnapshot dataSnapshot) {
    
                 counter = dataSnapshot.getChildrenCount();
                 for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                     post = postSnapshot.getValue(SettersGetters.class);
                     nicuNames.add(post.getNicuName());
                     nicuAddresses.add(post.getNicuAddress());
                     niucCount.add(post.getNicuCount());
                     nicuPrices.add(post.getNicuCount());
                     nicuPhones.add(post.getNicuPhone());
                     nicuUpdate.add(post.getNicuUpdate());
                     nicuLat.add(post.getNicuLat());
                     nicuLng.add(post.getNicuLng());
                     nicuDes.add(post.getNicuDesc());
                     a++;
                     Toast.makeText(MapsActivity.this,"jhkjhk", Toast.LENGTH_LONG).show();
                     System.out.println(nicuNames.get(0));
                 }
                 //Toast.makeText(MapsActivity.this,"jhkjhk" + a, Toast.LENGTH_LONG).show();
             }
    
             @Override
             public void onCancelled(DatabaseError databaseError) {
    
             }
    
         });
    

    【讨论】:

    • 这看起来很糟糕....child("Kfx7408plvgugiMR1Se")。该 ID 是自动分配的,您无法提前知道
    • 我想告诉您的是,您提供的数据库引用不正确。发布你的全部,然后只有一个可以帮助你。
    • *不是我的代码。我是说你的答案似乎不对
    猜你喜欢
    • 2021-04-28
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 2020-02-27
    相关资源
    最近更新 更多