我正在开发一个带有firebase实时数据库的android应用程序。现在,我在执行查询之后寻找UserProfile对象。因此我写了下面的文章来获得UserProfile
这是我的课

public class UserProfile {

    @NonNull
    private  String id;
    @NonNull
    private String firstName;
    private String lastName;
    private String image;
    @NonNull
    private String email;
    @NonNull
    private Date created;
    private Date updated;

    // constructor, getter, setter & toString ...
}

数据库结构如下。
userProfile
|__ hD77qeMX3IPQcKGcuSBOgJOIhHk2
    |__ created
    |   |__ date: 22
    |   |__ day: 0
    |   |__ hours: 21
    |   |__ minutes: 26
    |   |__ month: 3
    |   |__ seconds: 6
    |   |__ time: 1524421566951
    |   |__ timezoneOffset: -180
    |   |__ year: 118
    |__ email: "[email protected]"
    |__ firstName: "first_name"
    |__ id: "hD77qeMX3IPQcKGcuSBOgJOIhHk2"
    |__ lastName: "last_name"

这里是我得到错误的地方。
// query method
public UserProfile getUserProfile(String id) {
    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("userProfile");
    final UserProfile[] userProfile = {null};
    Query query = databaseReference.child(id);//orderByChild("id").equalTo(0);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                userProfile[0] = dataSnapshot.getValue(UserProfile.class);
                // print statement for userProfile[0] shows the UserProfile exactly! which is not null
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    return userProfile[0];
}

UserProfile方法从firebase获取实际的用户配置文件,但最后onDataChange方法返回空值。从getUserProfile方法获取UserProfile缺少什么?

最佳答案

这里缺少异步执行的点。添加侦听器以从firebase数据库检索值时,数据不能立即返回给调用方函数。在完成从firebase获取数据的后台onDataChanged执行后,该数据将在AsyncTask方法中可用。

07-28 02:14
查看更多