Firebase加载数据onCreate()

时间:2016-06-25 11:48:13

标签: android firebase firebase-realtime-database

我想加载数据集oncreate()。

由于数据不会改变,我使用一次性加载器:

protected void onCreate(Bundle savedInstanceState) {
    ....

    mDatabase.child("users").child(userId).addListenerForSingleValueEvent(
        new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                currentUser = dataSnapshot.getValue(Users.class);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.w(TAG, "error:", databaseError.toException());
            }
    });
    String name = currentUser.getName();
    ....
}

但是数据不可用,在null对象上调用getName函数。

如何获取onCreate()的数据?

1 个答案:

答案 0 :(得分:4)

问题是Firebase使用异步侦听器来引用数据库引用,并将name变量设置为null currentUser

尝试将名称var声明为final并在侦听器之前,并在firebase回调中设置其值。

<强>更新 一个例子如何实现和使用“覆盖”功能:

final String name;
mDatabase.child("users").child(userId).addListenerForSingleValueEvent(
new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            currentUser = dataSnapshot.getValue(Users.class);
            name = currentUser.getName();

            fooFunc(name); // calling a function with data
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.w(TAG, "error:", databaseError.toException());
        }
});

@Override
public void fooFunc(String name) {
    // name != null, when called from the the callback
    // dont forget to check it
}