【问题标题】:how to retrive a list from the firebase database如何从 Firebase 数据库中检索列表
【发布时间】:2020-04-12 09:00:56
【问题描述】:

这是我的数据库结构

我有一个乘客列表,如果乘客列表包含不止一名乘客,我想从 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());
    }
}

【问题讨论】:

  • 您希望所有乘客都显示在一个 TexVtiew 上,但您使用的是 RecyclerView,为什么?
  • 可能有多个与用户相关的预订,因为您可能已经看到了我的数据库@MohsenCadir 的结构
  • 发布你的持有人/适配器类的回收者视图

标签: android firebase-realtime-database firebaseui


【解决方案1】:

如果你想在一个 TextView 中显示所有乘客,那么你不应该这样做......现在你正在使用 RecyclerView,它会使 rows == 乘客数量 并且它完全为什么我们使用 RecyclerView

如果你想在一个 textView 中显示PassengerList,请这样做

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

这里yourList乘客名单

【讨论】:

  • 它为两名乘客生成两个 recylerView 项目...我希望如果他们属于一个 List 应该只有一个 textView 并且两名乘客的详细信息将出现在一个 TextView @devROYAL 中
猜你喜欢
  • 2018-12-09
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 2021-09-14
  • 2018-10-21
  • 2017-11-30
  • 1970-01-01
  • 2017-12-20
相关资源
最近更新 更多