我在这里遇到了问题。 我有一个叫做“用户”的Firebase数据库子,里面有我称为“团队”的其他孩子,我必须把内容带到“团队”里面并用FirebaseAdapter在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的数据快照获取的,我在其中搜索登录应用程序的用户的id。 数据快照代码如下:
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是空的。我该如何解决这个问题?
答案 0 :(得分:0)
要解决此问题,请在onDataChange()方法中移动idUser
String的声明,否则它将始终为null
。
String idUser = child.getKey().toString();
这是由于onDataChange()
方法的异步行为造成的,即使您将.child(idUser)
分配给DatabaseReference
之前也会调用此方法。
在方法中移动声明并在那里移动using it
,解决您的问题。在方法中也使用log语句,如下所示:
Log("TAG", idUser);
如果您想在该方法之外使用该字符串的值,请查看我在这篇文章中的回答How To Get Async Value Outside onDataChange() Method。
希望它有所帮助。
答案 1 :(得分:0)
我只是在de listener中移动firebaseadapter的代码解决了这个问题。