Android 创建类时从数据库检索数据

Android 创建类时从数据库检索数据,android,firebase,firebase-realtime-database,oncreate,Android,Firebase,Firebase Realtime Database,Oncreate,我有一个片段,当我的片段开始时,我需要查询我的firebase实时数据库。我在运行onCreate方法时直接添加数据库连接代码,但在打印toast时仍然得到null @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

我有一个片段,当我的片段开始时,我需要查询我的firebase实时数据库。我在运行onCreate方法时直接添加数据库连接代码,但在打印toast时仍然得到null

  @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        View r = inflater.inflate(R.layout.friends, container, false);


        FirebaseAuth mAuth = FirebaseAuth.getInstance();
        FirebaseUser user = mAuth.getCurrentUser();
        FirebaseDatabase db = FirebaseDatabase.getInstance();

        String userEmail = user.getEmail();

        DatabaseReference userDetails = db.getReference("users").child(userEmail);

        userDetails.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                myUser = dataSnapshot.getValue(User.class);
                postCount = myUser.getTotalPosts();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });



        Toast.makeText(getActivity(), "jjjjj " + postCount, Toast.LENGTH_SHORT).show();
因此,我所做的是尝试将所有数据库连接和检索代码包装在一个静态块中,因为在创建类时,应该首先运行该块

static{
 // everything in here from above code excluding the toast
} 
然后我尝试在onCreateView中再次打印postCount,但仍然得到postCount为空的相同结果

我如何克服这个问题

谢谢

p.S我确信我正在侦听的节点存在于数据库中

这只是因为addListenerForSingleValueEvent正在处理另一个非UI线程后台线程和Toast.makeText。。。正在处理UI线程

因此,Toast.makeText的执行。。甚至在更新后计数的值之前发生。因此,在Toast.makeText中,您将获得postCount的默认值

要删除此项,可以编写

Toast.makeText(getActivity(), "jjjjj " + postCount, Toast.LENGTH_SHORT).show();
在您的onDataChange方法中

例如:


显然,设置时应该使用此值。显然,这是在ondatachange内部设置的
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
myUser = dataSnapshot.getValue(User.class);
postCount = myUser.getTotalPosts();
Toast.makeText(getActivity(), "jjjjj " + postCount, Toast.LENGTH_SHORT).show();
 }