这个问题在这里已经有答案了:
为什么调用api的函数返回空值或空值(1个答案)
如何检查firestore中是否存在某个数据(1个答案)
如何作为方法的结果返回documentsnapshot(2个答案)
firebase firestore从集合中获取数据(6个答案)
上个月关门了。
我用 docRef.get()
从CloudFireStore获取收藏Map。但是,我离开后无法使用Map中的值 public void onSuccess(DocumentSnapshot documentSnapshot)
方法。在js,我知道我可以 subscribe
但是在android中我不知道该怎么做。
这是我获取Map的代码:
docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if(documentSnapshot.exists()){
doc = documentSnapshot.getData();
Toast.makeText(ChatActivity.this,"Data loaded",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(ChatActivity.this,"No data exists",Toast.LENGTH_SHORT).show();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(ChatActivity.this, "Error", Toast.LENGTH_SHORT).show();
Log.d("TAG",e.toString());
}
});
在那之后我想用Map来设定 textView
成为 message
:
for(String key : doc.keySet()){
message += key + "\n" + doc.get(key)+"\n";
}
ui.setText(message);
1条答案
按热度按时间bis0qfac1#
作为一个没有人指出的地方,
Firestore
电话是Asynchronous
你需要一个callback
当你下载了数据时触发,这是有争议的。你的doc
变量在onSuccess
回调是执行的,但可能您的代码的其他部分以前使用过它onSuccess
称为(异步)。另一种方法是将代码 Package 到一个方法中,并在onsuccess主体回调中使用它们,因此您可以确定当数据可调度时,此方法将执行,并且不需要额外的接口将其用作回调:
然后使用它: