android - 如何在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) {
}
});
解决方案
为什么甚至您都在尝试创建接口,因为当您想在类之间进行通信时接口很有用,但是这里您的方法是私有的,这意味着您不与任何其他类进行通信。
试试这个:
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
}
}
推荐阅读
- visual-studio-code - VS Code编辑器工作区文件可以指定默认起始目录吗
- objective-c - 在 Objective-C 中,在创建子类时,如何让它知道在超类的 .m 文件中声明的属性?推荐的方法是什么?
- python - 我如何每小时重新采样包含一列推文的数据框?(我想每小时连接所有推文)
- amazon-web-services - 在笔记本启动时安装 jupyterlab 扩展
- excel - 在 Excel VBA 中计算频率
- casting - 将小数(38,10)转换为在pyspark中浮动时截断值
- log4j2 - 使用 log4j2 未生成日志文件
- python - 使用 Python 加入两个基于 ID 元素的 JSON
- android - Android Q,使用 MediaStore ContentResolver 获取文件列表
- python - 有没有一种方法可以在不使用 winsound 的情况下产生特定频率的哔声?