首页 > 解决方案 > 如何在onDatachanged中存储arraylist并在android外部返回

问题描述

我正在尝试从 firebase 获取对象并存储到 arraylist。我已将 arraylist 声明为全局变量。在 onDataChanged 中,我已将对象添加到数组列表中。因此,当尝试从任何其他方法之外访问 arraylist 时,它会抛出空指针异常

    List<BookingRequest> bookedSlot;


    private void getBookingDetails(FirebaseCallback firebaseCallback) {
    req.orderByChild("b_id").equalTo("01").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
               BookingRequest currRequet = snapshot.getValue(BookingRequest.class); // you 
               bookedSlot.add(currRequest);
            }
            firebaseCallback.onCallBack(bookedSlot);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }

界面

  private  interface FirebaseCallback{
    void onCallBack(ArrayList<BookingRequest> list);
}

内部 Oncreate 方法()

       getBookingDetails(new FirebaseCallback() {
        @Override
        public void onCallBack(ArrayList<BookingRequest> list) {

        }
    });

标签: androidfirebasefirebase-realtime-database

解决方案


为什么甚至您都在尝试创建接口,因为当您想在类之间进行通信时接口很有用,但是这里您的方法是私有的,这意味着您不与任何其他类进行通信。

试试这个:

private void getBookingDetails() {
req.orderByChild("b_id").equalTo("01").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
           BookingRequest currRequet = snapshot.getValue(BookingRequest.class); // you 
           bookedSlot.add(currRequest);
        } 
          useBookedSlot(bookedSlot);          
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {


 }


 private  useBookedSlot(List<BookSlot> bookedSlot)

{

     if(bookedSlot!==null&&bookedSlot.size()!=0)
        {
           // do your stuff
         }
}

推荐阅读