gpt4 book ai didi

java - 为什么firebase的addValueEventListener的onDataChange方法中的ArrayList不为null,但外面却为null?

转载 作者:行者123 更新时间:2023-12-02 11:18:07 25 4
gpt4 key购买 nike

在我的项目中,我从 Firebase 读取数据并将数据添加到 Arraylist<object> 中.

我创建了我的Arraylist在 oncreate() 中并在 onDataChange() 中使用它.

onDataChange方法addValueEventListener ArrayList 不为 null,它被正确读取。但外面读的是0(空)。这是为什么?

我的代码:

public class MainActivity extends AppCompatActivity {


private ArrayList<myObject> myListOfObjact;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();


myListOfObjacts= new ArrayList<myObject>();

Log.e(TAG, " myListOfObjacts.size: " + myListOfObjacts.size());
// size of myListOfObjacts here is 0 (null)

// Read from the database
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {

myObject data1 = postsnapshot.getValue(myObject.class);
myListOfObjacts.add(data1);
}

Log.e(TAG, " myListOfObjacts.size: " + myListOfObjacts.size());
// size of myListOfObjacts here is reading correctly

}

@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});

Log.e(TAG, " myListOfObjacts.size: " + myListOfObjacts.size());
// size of myListOfObjacts here also is 0 (null)

}

}

最佳答案

Firebase 数据库客户端在主线程外执行所有网络和磁盘操作。

Firebase 数据库客户端在主线程上调用代码的所有回调。

因此,onDataChange() 几乎总是在其他基于主 (UI) 线程的方法(例如 onCreate()、onStart()...)之后触发,因为 onDataChange() 依赖于您设备的互联网速度。实际上,您看到的 null 值在首次记录或调用时为 null,但在您看到布局上填充的值时则不是 null。

关于java - 为什么firebase的addValueEventListener的onDataChange方法中的ArrayList不为null,但外面却为null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50125922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com