此问题在此处已有答案:
How can I get document values from a collection for the logged in user into a using Firestore?(1个答案)
昨天关门了。
我在我的Firestore中有这样的结构,我希望登录的用户能够获得所有的图像URL和其他字段,如名称,价格和与该用户ID相关的描述。这些信息将被加载到一个recyclerView中。
这是物料模型
package com.bac.shoesrecyclerview;
public class Item {
private String itemName;
private String itemPrice;
private String itemDescription;
private String itemImage;
public Item(String itemName, String itemPrice, String itemDescription, String itemImage) {
this.itemName = itemName;
this.itemPrice = itemPrice;
this.itemDescription = itemDescription;
this.itemImage = itemImage;
}
public Item(){
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public String getItemPrice() {
return itemPrice;
}
public void setItemPrice(String itemPrice) {
this.itemPrice = itemPrice;
}
public String getItemDescription() {
return itemDescription;
}
public void setItemDescription(String itemDescription) {
this.itemDescription = itemDescription;
}
public String getItemImage() {
return itemImage;
}
public void setItemImage(String itemImage) {
this.itemImage = itemImage;
}
}
这是我尝试过的代码,它会破坏我的应用程序:
fStore.collection("images").document(FirebaseAuth.getInstance().getCurrentUser().getUid()).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if(task.isSuccessful()){
DocumentSnapshot document = task.getResult();
Item item = new Item();
itemList = new ArrayList<>();
while (document.exists()){
item.setItemName(document.getString("name"));
item.setItemPrice(document.getString("price"));
item.setItemDescription(document.getString("description"));
item.setItemImage(document.getString("image"));
itemList.add(item);
}
shoeAdapter = new ShoeAdapter(MainActivity.this, itemList);
recyclerView.setAdapter(shoeAdapter);
shoeAdapter.notifyDataSetChanged();
}
}
2条答案
按热度按时间5vf7fwbs1#
尝试以下查询以获取单个用户的多个文档-
检查文档中是否有更多此类查询-https://firebase.google.com/docs/firestore/query-data/queries
euoag5mw2#
不需要分别获取每个字段的值。您可以直接将Realtime Database中的子对象Map到
Item
类型的对象中。为了能够做到这一点,您必须如下更改类的声明:为什么?因为类中字段的名称应该命名数据库中存在的名称。
现在,为了获得与登录用户相对应的图像,您必须初始化列表、适配器和RecyclerView,并创建如下所示的查询:
我所做的更改:
1.不需要使用while循环,只需要检查空值。
1.我已经在异步操作之外添加了与UI相关的声明。一旦获取Item对象的操作完成,我们只通知适配器有关的更改。
1.始终处理错误。