有什么方法可以从代码所在的 firebase 中提取数据吗?我目前有 valueEventListeners,但它们都在它们下面的代码之后运行,从而使以下代码无效。我希望能够准确地在代码所在的位置提取一个值,而不是稍后。
到目前为止,我还没有在网上找到任何与此相关的信息。
我在代码中遇到的问题的一个很好的例子:
public void onItemClick(AdapterView<?> l, View v, final int position, long id) {
FirebaseAuth mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
final String uid = user.getUid();
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
cCESnapshot = dataSnapshot.child(uid).child("currChallenges").child(challengeList.get(position));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Intent intent = new Intent();
intent.setClass(this, ChallengeView.class);
intent.putExtra("snapshot", cCESnapshot.toString());
intent.putExtra("name", challengeList.get(position));
startActivity(intent);
}
cCESnapshot 为 null,因为 Intent 在 valueEventListener 之前运行。
最佳答案
onDataChange()
是异步的,因此使用检索到的数据的唯一方法是在 onDataChange()
内部,例如:
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
cCESnapshot = dataSnapshot.child(uid).child("currChallenges").child(challengeList.get(position));
Intent intent = new Intent();
intent.setClass(this, ChallengeView.class);
intent.putExtra("snapshot", cCESnapshot.toString());
intent.putExtra("name", challengeList.get(position));
startActivity(intent);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
关于java - 如何在代码中的确切位置将数据从 firebase 提取到 android studio 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55601562/