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

Firestore获取当前用户详情及交易账单显示错误解决方案咨询

问题1:如何从Firestore中打印当前用户详情?

首先得确认用户已经通过Firebase Auth完成登录了,不然没法定位到具体的用户数据。接下来分两步走就行:

  • 第一步,获取当前登录用户的UID(唯一标识符):

    FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
    if (currentUser != null) {
        String userId = currentUser.getUid();
        // 拿到UID后就可以去Firestore查用户详情了
    } else {
        // 这里要处理用户未登录的情况,比如跳转到登录页
    }
    
  • 第二步,用UID去Firestore查询并打印用户详情。假设你的用户数据存在名为users的集合里,每个文档的ID就是用户的UID:

    firebasefirestore.collection("users").document(userId)
            .get()
            .addOnCompleteListener(task -> {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document.exists()) {
                        // 直接打印整个用户文档的数据
                        Log.d("UserInfo", "用户详情:" + document.getData());
                        // 也可以提取特定字段打印,比如用户名、邮箱
                        String userName = document.getString("name");
                        String userEmail = document.getString("email");
                        Log.d("UserInfo", "用户名:" + userName + ",邮箱:" + userEmail);
                    } else {
                        Log.d("UserInfo", "未找到该用户的详情文档");
                    }
                } else {
                    Log.e("UserInfo", "查询用户详情失败", task.getException());
                }
            });
    

如果你的用户数据存在其他集合或者结构里,只要把集合名称、查询条件调整成对应逻辑就行,核心就是用当前用户的UID来精准定位数据。


问题2:如何仅展示特定用户的交易详情?

你的问题核心在于当前查询没有过滤用户身份,只是按razorPayId排序取最后一条,自然会拿到所有用户里最新的那笔交易,不管是谁的。要解决这个问题,得从两个方面调整:

1. 确保交易文档里存储了用户UID

在创建交易记录的时候,一定要把当前登录用户的UID存入文档,这样后续才能区分是谁的交易。比如添加交易时的代码:

String currentUserId = FirebaseAuth.getInstance().getCurrentUser().getUid();
Map<String, Object> transactionData = new HashMap<>();
transactionData.put("razorPayId", yourRazorPayId);
transactionData.put("userId", currentUserId); // 关键:存入用户UID
// 其他交易字段,比如金额、时间等
transactionData.put("amount", transactionAmount);
transactionData.put("timestamp", FieldValue.serverTimestamp());

firebasefirestore.collection("UserDataR").add(transactionData);

2. 修改查询逻辑,添加用户身份过滤

把你的查询代码改成这样,先过滤出当前用户的交易,再排序取最新的一条:

String currentUserId = FirebaseAuth.getInstance().getCurrentUser().getUid();
Query query = firebasefirestore.collection("UserDataR")
        .whereEqualTo("userId", currentUserId) // 只查当前用户的交易
        .orderBy("razorPayId") // 或者按时间戳排序更合理,比如orderBy("timestamp")
        .limitToLast(1);

这样调整后,每个用户打开账单模块时,只会查询自己名下的交易,就不会出现展示他人交易的问题了。另外建议用时间戳来排序交易,比用razorPayId更符合“最新交易”的逻辑哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:47:45