如何从Firebase数据库嵌套子节点获取指定值并展示到RecyclerView的TextView中
解决方案
要获取Firebase嵌套层级下的grandprice字段,按以下步骤修改即可:
1. 数据读取逻辑修改
你可以直接从DataSnapshot中手动获取嵌套字段,不需要改动现有模型结构,在遍历订单节点的位置修改代码如下:
mDBListener = usersRef.child(uid).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { recommended.clear(); for (DataSnapshot invoiceSnapshot : dataSnapshot.getChildren()) { InvoiceModels upload = invoiceSnapshot.getValue(InvoiceModels.class); upload.setKey(invoiceSnapshot.getKey()); // 替换下方的"嵌套父节点名"为你实际存储grandprice的上层节点名称,多层嵌套就多次调用.child() String grandPrice = invoiceSnapshot.child("嵌套父节点名").child("grandprice").getValue(String.class); // 将获取到的价格赋值给模型的totalPrice字段,适配你现有适配器的取值逻辑 upload.setTotalPrice(grandPrice); recommended.add(upload); } mAdapter.notifyDataSetChanged(); mProgressBar.setVisibility(View.GONE); } @Override public void onCancelled(DatabaseError databaseError) { Toast.makeText(getActivity(), databaseError.getMessage(), Toast.LENGTH_SHORT).show(); mProgressBar.setVisibility(View.INVISIBLE); } });
如果你更希望通过模型类自动映射,需要让InvoiceModels的结构和数据库嵌套结构完全匹配:
- 新增嵌套层级对应的子类,比如
grandprice存放在cart节点下,就新增Cart类,内部声明grandprice字段和对应的get/set方法 - 在
InvoiceModels中声明private Cart cart;,并添加对应的get/set方法,后续就可以通过currentProduct.getCart().getGrandprice()获取值
2. 适配器赋值逻辑修改
放开原有注释的赋值代码即可,如果grandprice是数字类型,需要转成字符串避免系统误判为资源ID报错:
@Override public void onBindViewHolder(RecyclerViewHolder holder, final int position) { InvoiceModels currentProduct = recomended.get(position); // 数字类型用这个写法:holder.totalPrice.setText(String.valueOf(currentProduct.getTotalPrice())); holder.totalPrice.setText(currentProduct.getTotalPrice()); }
内容的提问来源于stack exchange,提问作者MGA-AL
相关产品推荐
相关产品推荐

