在正确的时机上乘Firebase数据听众



我在这里遇到问题。我有一个名为"用户"的firebase数据库孩子,其中有其他孩子称为"团队",我必须将内容带入"团队"中,并在lighbaseadapter的listView中向他们展示。

firebaseadapter就是这样:

FirebaseListAdapter<String> firebaseListAdapter = new FirebaseListAdapter<String>(
            this,
            String.class,
            android.R.layout.simple_list_item_1,
            //todo Conseguir exibir na lista, as equipes embedadas no usuário logado
            mRef.child("users").child(idUser).child("teams")

    )

您可以看到,我想将"团队"带入一个指定子里,我使用" Iduser"搜索。此" IDUSER"是使用Firebase的DataSnapShot拍摄的,我在该应用程序上搜索用户的ID。DatasNapshot代码如下:

    user = mAuth.getCurrentUser().getEmail().toString();
    mRef = FirebaseDatabase.getInstance().getReference();
    Query query = mRef.child("usuarios").orderByChild("email").equalTo(user);
    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot child : dataSnapshot.getChildren()){
                idUser = child.getKey().toString();
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

我的问题是,在执行查询之前,在Firebaselistadapter的代码部分中调用" Iduser"。因此,我遇到了一个错误,因为iDuser是空的。我该如何解决这个问题?

要解决此问题,将idUser字符串的声明移动到OnDataChange()方法中,否则将始终是null

String idUser = child.getKey().toString();

这是由于onDataChange()方法的异步行为而发生的,即使您将.child(idUser)分配给DatabaseReference

将声明在方法内移动,并且using it也可以解决您的问题。在这样的方法中还使用日志语句:

Log("TAG", idUser);

如果您想在该方法之外使用该字符串的值,请查看我的答案,从本文中,如何在OndatAckange()方法外获得异步值。

希望它有帮助。

我解决了这个问题

相关内容

  • 没有找到相关文章

最新更新