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
相关产品推荐
相关产品推荐

