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

如何通过getUid获取当前登录用户并在RecyclerView展示其预订信息

如何在RecyclerView中仅展示当前登录用户的预订记录

我来帮你解决这个问题!你现在的代码会拉取所有用户的预订记录,只需要给Firebase查询添加一个过滤条件,就能只显示当前登录用户的内容啦,具体步骤如下:


步骤1:确保Booking模型包含用户UID字段(如果还没加的话)

首先,你的Booking类需要添加一个uid字段来关联当前用户,这样我们才能准确过滤出该用户的预订。修改你的Booking类:

public class Booking { 
    private String userEmail; 
    private String NameOfPlace; 
    private String Slotnumber; 
    private String Duration; 
    private String StartTime; 
    private String Price; 
    private String currentDate;
    // 新增UID字段
    private String uid;

    public Booking() { } 

    // 更新构造方法,加入uid参数
    public Booking(String userEmail, String nameOfPlace, String slotnumber, String duration, String startTime, String price, String currentDate, String uid) { 
        this.userEmail = userEmail; 
        NameOfPlace = nameOfPlace; 
        Slotnumber = slotnumber; 
        Duration = duration; 
        StartTime = startTime; 
        Price = price; 
        this.currentDate = currentDate;
        this.uid = uid;
    } 

    // 新增getter和setter方法
    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    // 原有的getter和setter方法保持不变
    public String getUserEmail() { return userEmail; } 
    public void setUserEmail(String userEmail) { this.userEmail = userEmail; } 
    public String getNameOfPlace() { return NameOfPlace; } 
    public void setNameOfPlace(String nameOfPlace) { NameOfPlace = nameOfPlace; } 
    public String getSlotnumber() { return Slotnumber; } 
    public void setSlotnumber(String slotnumber) { Slotnumber = slotnumber; } 
    public String getDuration() { return Duration; } 
    public void setDuration(String duration) { Duration = duration; } 
    public String getStartTime() { return StartTime; } 
    public void setStartTime(String startTime) { StartTime = startTime; } 
    public String getPrice() { return Price; } 
    public void setPrice(String price) { Price = price; } 
    public String getCurrentDate() { return currentDate; } 
    public void setCurrentDate(String currentDate) { this.currentDate = currentDate; } 
}

注意:如果你在添加预订数据到Firebase的时候,已经把当前用户的uid存入了Bookings节点,这一步可以跳过;如果还没存,记得在创建Booking对象时传入uid参数(就是你获取到的user.getUid())。


步骤2:修改Firebase查询,添加过滤条件

现在修改你的loadMenu()方法,把原来直接获取所有Bookings的引用,改成带过滤条件的查询,只获取当前用户UID对应的预订记录:

private void loadMenu() {
    // 创建查询:筛选出uid等于当前登录用户uid的记录
    Query userBookingsQuery = refbooking.orderByChild("uid").equalTo(uid);

    adapter=new FirebaseRecyclerAdapter<Booking, BookingViewHolder>(
        Booking.class, 
        R.layout.viewbooking_layout, 
        BookingViewHolder.class, 
        userBookingsQuery // 这里用过滤后的查询代替原来的refbooking
    ) { 
        @Override 
        protected void populateViewHolder(final BookingViewHolder viewHolder, final Booking model, int position) { 
            viewHolder.bookedplace.setText(model.getNameOfPlace()); 
            viewHolder.bookedslot.setText(model.getSlotnumber()); 
            viewHolder.bookeddate.setText(model.getCurrentDate()); 
            viewHolder.bookedduration.setText(model.getDuration()); 
            viewHolder.bookedstarttime.setText(model.getStartTime()); 
        } 
    }; 
    recycler_booking.setAdapter(adapter); 
}

可选:添加数据库安全规则(推荐)

为了保证数据安全,防止其他用户获取不属于自己的预订记录,你可以在Firebase控制台的规则页面,设置如下规则:

{
  "rules": {
    "Bookings": {
      "$bookingId": {
        ".read": "auth != null && data.child('uid').val() === auth.uid",
        ".write": "auth != null && newData.child('uid').val() === auth.uid"
      }
    }
  }
}

这个规则会确保只有登录用户才能读写自己的预订记录,进一步提升安全性。


这样修改之后,你的RecyclerView就只会显示当前登录用户的预订记录啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:49:42