Firebase数据库中能否将pushID绑定到userUid并查询对应数据
问题解决步骤
首先明确你当前代码的逻辑缺陷:你目前的Withdraw节点下的所有记录,没有存储对应用户的UID字段,直接填写固定child值无法查询到对应用户的所有提现记录,需要先调整存储逻辑,再做查询:
第一步:修改存储逻辑,补充用户UID字段
你在生成withdrawMap的时候,新增一条用户UID的映射:
HashMap<String, Object> withdrawMap = new HashMap<>(); withdrawMap.put("id", pushUser); withdrawMap.put("balance", "5000"); withdrawMap.put("email", emailMP); withdrawMap.put("date", dateString); withdrawMap.put("statut", "Pending"); withdrawMap.put("image", mediumPackImage); // 新增这行,存入当前用户的UID withdrawMap.put("uid", user.getUid());
这样每条提现记录都会和对应用户的UID绑定。
第二步:按用户UID查询所有关联的提现记录
你不需要在child("Withdraw")后面拼接固定子节点,而是用Firebase的条件查询筛选对应UID的记录即可:
// 先获取当前登录用户的UID String currentUid = user.getUid(); // 构建查询条件:筛选Withdraw节点下uid字段等于当前用户UID的所有记录 Query userWithdrawQuery = FirebaseDatabase.getInstance().getReference() .child("Withdraw") .orderByChild("uid") .equalTo(currentUid); // 给查询添加监听器获取结果 userWithdrawQuery.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { for (DataSnapshot ds : snapshot.getChildren()) { // 这里遍历拿到的就是当前用户的所有提现记录 String withdrawId = ds.getKey(); // 可以把数据转成你自定义的实体类或者直接取值 String amount = ds.child("amount").getValue(String.class); // 后续做页面展示逻辑即可 } } @Override public void onCancelled(@NonNull DatabaseError error) { // 处理查询错误 } });
补充说明
如果你仅需要查询单条提现记录,你可以直接把之前生成的pushUser值作为第二个child的参数传入,但这种方式不适合拉取某个用户的全部提现记录,推荐优先使用上述条件查询方案。
内容的提问来源于stack exchange,提问作者arma
相关产品推荐
相关产品推荐

