You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firestore中获取已登录用户对应集合的文档数据?

需求与问题

我希望在用户登录后,访问images集合并获取与当前登录用户ID关联的所有文档的图片URL及其他字段。下图是数据库结构:

数据库结构

导致应用崩溃的代码

fStore.collection("images").document(FirebaseAuth.getInstance().getCurrentUser().getUid()).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if(task.isSuccessful()){

            for(int i = 0; i < Objects.requireNonNull(task.getResult()).getData().size(); i++){
                itemList.add(new Item(task.getResult().getData().get("image"+i).toString(), task.getResult().getData().get("name"+i).toString(), task.getResult().getData().get("price"+i).toString(), task.getResult().getData().get("description"+i).toString()));
            }
            shoeAdapter = new ShoeAdapter(MainActivity.this, itemList);
            recyclerView.setAdapter(shoeAdapter);
            shoeAdapter.notifyDataSetChanged();
        }
    }
});

尝试的改进代码(切换账号后数据未更新)

最初的方案未针对当前登录用户做处理,切换账号后RecyclerView仍显示相同内容,于是我尝试了这段代码:

for (int i = 0; i < Objects.requireNonNull(task.getResult()).size(); i++) {
        Item item = new Item();

        item.setItemName(task.getResult().getDocuments().get(i).getString("name"));
        item.setItemPrice(task.getResult().getDocuments().get(i).getString("price"));
        item.setItemDescription(task.getResult().getDocuments().get(i).getString("description"));
        item.setItemImage(task.getResult().getDocuments().get(i).getString("image"));

        itemList.add(item);
    }
    shoeAdapter = new ShoeAdapter(this, itemList);
    recyclerView.setAdapter(shoeAdapter);
    shoeAdapter.notifyDataSetChanged();
});

内容的提问来源于stack exchange,提问作者jayCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:30:52