как получить список из базы данных Firebase - PullRequest
0 голосов
/ 12 апреля 2020

это моя структура базы данных

У меня есть список пассажиров, и я хочу получить их из базы данных firebase, если список пассажиров содержит более одного пассажира, тогда я хочу, чтобы эти данные были показаны в одном textView. Но каждый раз он генерирует 2 textView, если было два пассажира. Я хочу, чтобы во всех случаях он отображал все данные в одном TextView.

Это моя модель Class`

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

1 Ответ

0 голосов
/ 13 апреля 2020

Если вы хотите отобразить всех пассажиров в одном TextView, то делать это не следует ... Прямо сейчас вы используете RecyclerView, и он будет составлять строк == количество пассажиров , и именно поэтому мы используем RecyclerView

Если вы хотите показать PassengerList в одном текстовом представлении, выполните следующие действия:

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

Здесь yourList равно Список пассажиров

...