【发布时间】:2018-02-10 18:29:45
【问题描述】:
我在为 OnSuccessListener 之外的变量赋值时遇到问题。正如您在代码中看到的,首先,我尝试将 abc 的值写入侦听器内部的日志,然后在侦听器完成工作后在外部调试相同字符串的值,但在日志文件中我首先看到“之后:null”并且仅在“result = testField”之后。
我想,关键是侦听器异步执行任务,但我不知道它何时完成。我使用 Thread.sleep '修复'了这个问题,但这不是解决方案。有谁知道将字段值分配给变量的正确方法?
String abc;
private void getInfo(String uid) {
DocumentReference doc = FirebaseFireStore.getInstance().document("sb/base");
store.collection("users").document(uid).get().addOnSuccessListener(
new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if (!documentSnapshot.exists())
log("onSuccess: EMPTY");
else {
abc = new JSONObject(documentSnapshot.getData()).toString();
log("result = " + abc);
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(applicationManager.activity.getApplicationContext(),
"ERROR", Toast.LENGTH_SHORT).show();
}
});
log("after: " + abc);
}
【问题讨论】:
标签: java android asynchronous listener google-cloud-firestore