如何从Firebase数据库检索列表

问题描述 投票:0回答:1

这是我的数据库结构“”

我有一个乘客列表,如果乘客列表包含多个乘客,我想从Firebase数据库中检索他们,那么我想在一个textView中显示这些数据。但是,如果有两个乘客,每次生成2个textView。在所有情况下,我都希望它仅在一个TextView中显示所有数据。

这是我的模特班`

     public class RetrieveTickets {
       private String name;
       private String age;
       private String gender;
        public RetrieveTickets() {
      }

    public RetrieveTickets(String name, String age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
    public List<HashMap<String,Object>> toList(){
        List<HashMap<String,Object>> list=new ArrayList<>();
        HashMap<String,Object> map=new HashMap<>();
        map.put("name",getName());
        map.put("age",getAge());
        map.put("gender",getGender());
        list.add(map);
        return list;
    }

}

这是我正在显示数据的MyActivity

public class MyBookingsActivity extends AppCompatActivity{
private RecyclerView recyclerView;
private DatabaseReference databaseReference;
private FirebaseAuth mAuth;
private FirebaseRecyclerAdapter<RetrieveTickets, BookingHolder> firebaseRecyclerAdapter;
public static  List<String> trips=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_bookings);
    recyclerView = (RecyclerView) findViewById(R.id.my_bookings);
    recyclerView.setHasFixedSize(true);
   String tripId = getIntent().getStringExtra("TripId");
    trips.add(tripId);
   // String bookingId = getIntent().getStringExtra("BookingId");
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    mAuth = FirebaseAuth.getInstance();
    FirebaseUser user = mAuth.getCurrentUser();
    String userId = user.getUid();
    databaseReference = FirebaseDatabase.getInstance().getReference();
        Query query = databaseReference.child("BooKings").child(userId).child(tripId).child("passenger");
        FirebaseRecyclerOptions<RetrieveTickets> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<RetrieveTickets>()
                .setQuery(query, RetrieveTickets.class)
                .build();

        firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<RetrieveTickets, BookingHolder>(firebaseRecyclerOptions) {
            @Override
            protected void onBindViewHolder(@NonNull BookingHolder holder, int position, @NonNull RetrieveTickets model) {
                                                holder.setPassengers(model);
            }

            @NonNull
            @Override
            public BookingHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.tickets, parent, false);
                return new BookingHolder(view);
            }

            @Override
            public void onError(@NonNull DatabaseError error) {
                super.onError(error);
                Toast.makeText(MyBookingsActivity.this,"error"+error,Toast.LENGTH_LONG).show();
            }
        };

    recyclerView.setAdapter(firebaseRecyclerAdapter);
}

@Override
protected void onStart() {
    super.onStart();
    firebaseRecyclerAdapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    if (firebaseRecyclerAdapter != null) {
        firebaseRecyclerAdapter.stopListening();
    }
}
public static class BookingHolder extends RecyclerView.ViewHolder{
    private TextView passenger;
    public BookingHolder(@NonNull View itemView) {
        super(itemView);
        passenger=(TextView)itemView.findViewById(R.id.passenger);
    }
    void setPassengers(RetrieveTickets retrieveTickets) {
        passenger.setText(retrieveTickets.toList().toString());
    }
}
android firebase-realtime-database firebaseui
1个回答
0
投票

如果您想在一个TextView中显示所有乘客,那么您就不应该这样...现在您正在使用RecyclerView,它将产生rows ==乘客数量,这正是我们使用RecyclerView的原因

如果要在一个textView中显示PassengerList,请像这样

StringBuilder passengerStrBuilder = new StringBuilder();
for (String details : yourList) {
   passengerStrBuilder.append(details + "\n");
}
textView.setText(passengerStrBuilder.toString());

这里您的清单旅客列表

© www.soinside.com 2019 - 2024. All rights reserved.