我在这里遇到问题。我有一个名为"用户"的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()方法外获得异步值。
希望它有帮助。
我解决了这个问题