首页 > 解决方案 > 如何通过 getUid 获取当前登录用户并在 RecyclerView 上显示其信息?

问题描述

下面是我的数据库结构

在此处输入图像描述

我在活动中创建了一个 recyclerView 来显示用户进行的所有预订。回收站视图工作正常,但问题是它显示了每个用户预订的所有详细信息。我只想显示当前登录用户进行的预订。我已经通过 getUid 创建了用户 ID。以下是从 firebase 检索数据的模型类。

public class Booking {
private String userEmail;
private String NameOfPlace;
private String Slotnumber;
private String Duration;
private String StartTime;
private String Price;
private String currentDate;

public Booking() {
}

public Booking(String userEmail, String nameOfPlace, String slotnumber, String duration, String startTime, String price, String currentDate) {
    this.userEmail = userEmail;
    NameOfPlace = nameOfPlace;
    Slotnumber = slotnumber;
    Duration = duration;
    StartTime = startTime;
    Price = price;
    this.currentDate = currentDate;
}

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;
}
}

以下是主要活动,然后是 recyclerviewHolder java 类:

FirebaseDatabase mdatabase;
DatabaseReference refbooking;
RecyclerView recycler_booking;
RecyclerView.LayoutManager layoutManager;

FirebaseRecyclerAdapter<Booking, BookingViewHolder> adapter;

String uid;
FirebaseUser user;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v= inflater.inflate(R.layout.view_booking, null);

    mdatabase=FirebaseDatabase.getInstance();
    refbooking=mdatabase.getReference().child("Bookings");

    user= FirebaseAuth.getInstance().getCurrentUser();
    uid=user.getUid();

    recycler_booking=(RecyclerView)v.findViewById(R.id.BookingRecyclerView);
    recycler_booking.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(getActivity());
    recycler_booking.setLayoutManager(layoutManager);

    loadMenu();

    return v;
}

private void loadMenu() {
    adapter=new FirebaseRecyclerAdapter<Booking, BookingViewHolder>(Booking.class, R.layout.viewbooking_layout, BookingViewHolder.class, refbooking) {
        @Override
        protected void populateViewHolder(final BookingViewHolder viewHolder, final Booking model, int position) {

viewHolder.bookedplace.setText(model.getNameOfPlace());
                    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);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    getActivity().setTitle("View Booking");
}
}

ViewHolder 类:

public class BookingViewHolder extends RecyclerView.ViewHolder {
public TextView bookedplace;
public TextView bookedslot;
public TextView bookeddate;
public TextView bookedduration;
public TextView bookedstarttime;

public BookingViewHolder(View itemView) {
    super(itemView);

    bookedplace= (TextView) itemView.findViewById(R.id.bookedplace);
    bookedslot= (TextView) itemView.findViewById(R.id.bookedslot);
    bookeddate= (TextView) itemView.findViewById(R.id.bookeddate);
    bookedduration=(TextView) itemView.findViewById(R.id.bookedduration);
    bookedstarttime= (TextView) itemView.findViewById(R.id.bookedstarttime);

}
}

请帮助我,这将不胜感激。谢谢

标签: androidfirebasefirebase-realtime-databaseandroid-recyclerviewrecyclerview-layout

解决方案


我看不到您在哪里查询 Firebase 数据库,或者您是否这样做。据我所知,您没有从 Firebase 检索数据。可能的解决方案是使用userEmail查询您的“预订”表并根据它获取数据。另一种可能的解决方案是在“预订”类中为 userId 保存一个变量,当然在 Firebase 数据库中。然后使用当前用户的uid查询您的“预订”表。


推荐阅读