如何从firebase读取子数据[重复]

Posted

技术标签:

【中文标题】如何从firebase读取子数据[重复]【英文标题】:How to read child data from firebase [duplicate] 【发布时间】:2020-01-12 17:51:50 【问题描述】:

我正在开发 android 应用程序,但在尝试从 firebase 读取产品数据时遇到问题。 我需要在回收站视图中使用这些产品名称、产品价格和产品描述数据。

当我尝试运行代码时,我没有得到这些数据。 我尝试了给定的代码:

ProductsRef = FirebaseDatabase.getInstance().getReference().child("Products");

    ProductsRef.addValueEventListener(new ValueEventListener() 

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) 
            productItems = getAllItems(dataSnapshot);
        

        @Override
        public void onCancelled(DatabaseError error) 
            // Failed to read value
            Log.w( "Failed to read value.", error.toException());
        
    );


public  ArrayList<Products> getAllItems(DataSnapshot dataSnapshot)

  items  = new ArrayList<Products>();

  for (DataSnapshot item : dataSnapshot.getChildren()) 

    items.add(new Products(
            item.child("category").getValue().toString(),
            item.child("description").getValue().toString(),
            item.child("date").getValue().toString(),
            item.child("image").getValue().toString(),
            item.child("pid").getValue().toString(),
            item.child("pname").getValue().toString(),
            item.child("price").getValue().toString(),
            item.child("time").getValue().toString()
    ));

  

  return items;

【问题讨论】:

有什么问题?如:当您运行此代码时,哪一行没有按照您的预期执行?请注意,如果您添加日志语句、显示它们打印的内容以及您期望它们打印的内容,通常最容易解释事情。 如果您在onDataChange 中放置一个断点并在调试器中运行代码,它会被触发吗?如果是这样,请单步执行代码,看看哪一行不起作用。我有根据的猜测是,您正在尝试在加载数据之前访问数据,但是您的问题中没有足够的信息可以确定。如果是这种情况,请参阅***.com/questions/50434836/… 您不能简单地在onDataChange() 方法之外使用productItems。请检查重复项以了解您为什么会出现这种行为以及如何使用自定义回调来解决此问题。 【参考方案1】:
ProductsRef.addListenerForSingleValueEvent(
        new ValueEventListener() 
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) 
                //Get map of Products in datasnapshot
                getAllItems((Map<String,Object>) dataSnapshot.getValue());
            

            @Override
            public void onCancelled(DatabaseError databaseError) 
                Log.w( "Failed to read value.", error.toException());
            
        );

private ArrayList getAllItems(Map<String,Object> products) 

    ArrayList<Long> list = new ArrayList<>();
    for (Map.Entry<String, Object> entry : products.entrySet())
        //Get user map
        Map value = (Map) entry.getValue();
        list .add((Long) value .get("category"));
        // add all your item
    

【讨论】:

以上是关于如何从firebase读取子数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用云功能从firebase数据库中读取数据而不依赖于事件[重复]

使用颤振从 Firebase 实时数据库中读取子节点的数量

如何在swift ios中通过键值读取子数据或过滤firebase数据

在具有子密钥uid(javascript)的firebase上检索数据

从 ArrayList 中的 Firebase 检索数据以获取图形

从 Firebase 提取的数据中没有出现 UITableViewCells