我想在create()上加载一个数据集。
由于数据不会更改,我使用一次性加载程序:

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();
    ....
}

但是数据不可用,getname函数对空对象调用。
如何获取oncreate()的数据?

最佳答案

问题是,firebase对数据库引用使用异步侦听器,并使用null设置name变量。
尝试将名称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
}

10-05 18:05
查看更多