如何通过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
相关产品推荐
相关产品推荐

