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

标签 java android firebase

在我的项目中,我从 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/

相关文章:

java - 如何读取文本文件中行列表的位置

java - 尽管数据库中只有一行,但 Jpa 返回多个结果

java - 将数据从 Activity 传递到同一 Activity 中在 webView 加载的 HTML 文件中使用的 JavaScript

android - 在Android上使用Webview浏览YouTube channel 是否可以?

android - 使用 parseSnapshot(DataSnapshot snapshot) 根据子键过滤要填充到 RecyclerView 中的项目

java - PrimeFaces 3.5 编辑器无法清除文本

java - 如何在 while 循环中从平均值计算中排除负数

java - 数组中 TextEdit 中的参数不正确

ios - 调用 `FIRApp.configure()` 时首次运行应用程序崩溃

firebase - 如何获取集合 Cloud Firestore 中的文档 ID 列表?