我一直在尝试通过 ID 从数据库中检索对象
public List<User> getCreatorOfCandidature(String userId)
{
DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = database.child("users");
final List<User> users= new ArrayList<User>();
Query query = ref.equalTo(userId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
try{
for (DataSnapshot data : snapshot.getChildren())
{
User user = data.getValue(User.class);
setCreateurDeLaDemande(user);
users.add(user);
}
} catch (Throwable e) {
}
}
@Override public void onCancelled(DatabaseError error) { }
});
return users;
}
我不确定问题是出在查询还是 onDataChange 中的变量设置。
请注意,在 User 对象中,定义了所有 getter 和 setter 以及默认构造函数。
**************************** 编辑************************************************ 这里我调用我的函数来检索用户。
public void setCandidatureFinale(Candidature candidatureFinale)
{
Demande demande = ((MyApplication) context.getApplicationContext()).demandeActuelle;
demande.setCandidatureFinale(candidatureFinale);
//recuperer le createur de la candidature pour la MAJ
List<User> users=getCreatorOfCandidature(candidatureFinale.getUserId());
User user=users.get(0);
user.setNbIntervention(user.getNbIntervention()+1);
user.setGainTotal(user.getGainTotal()+candidatureFinale.getPrixPropose());
DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = database.child("users").child(candidatureFinale.getUserId());
ref.setValue(user);
Toast.makeText((Activity) context, "La candidature a été acceptée", Toast.LENGTH_SHORT).show();
}
谢谢。
最佳答案
equalTo
这样不行,它必须与 orderBy*() 链接
检查文档 - https://firebase.google.com/docs/reference/js/firebase.database.Query
如果您正在寻找具有特定 UID 的用户,请尝试此操作
Query query = ref.orderByChild("yourUserIdField").equalTo(UID);
query.addChildEventListener(new ...)
关于java - 从未从 Firebase 数据库检索到数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42715043/