【问题标题】:How to read child data from firebase [duplicate]如何从firebase读取子数据[重复]
【发布时间】: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 中放置一个断点并在调试器中运行代码,它会被触发吗?如果是这样,请单步执行代码,看看哪一行不起作用。我有根据的猜测是,您正在尝试在加载数据之前访问数据,但是您的问题中没有足够的信息可以确定。如果是这种情况,请参阅stackoverflow.com/questions/50434836/…
  • 您不能简单地在onDataChange() 方法之外使用productItems。请检查重复项以了解您为什么会出现这种行为以及如何使用自定义回调来解决此问题。

标签: java android firebase firebase-realtime-database children


【解决方案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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2019-02-21
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多