我是Firestore的新手,正在学习Android。我面临的问题是关于代码的结构。以下是我的用例:
以前使用SQLite很容易。我可以运行查询以获取列表中的数据,检查列表并采取相应的措施。
// BEFORE
private boolean fnValidate() {
// some code...
// run Sqlite query and get data in list or something
// check if exists, return accordingly
}
// NOW
private boolean fnValidate() {
// some code...
notesRef.get().addOnSuccessListener(queryDocumentSnapshots -> {
for (QueryDocumentSnapshot s : queryDocumentSnapshots) {
// add data to list or something
}
// 'exists logic' will go here??
}).addOnFailureListener(e -> {
// show error
});
// I want 'exists logic' here like it was earlier, so that I can properly return true/false
}
现在您可以看到,这将无法按顺序进行。它将启动任务以获取笔记并继续。因此,我需要在exists logic
中添加我的OnSuccessListener
。
[此外,将来,如果我必须在exists logic
之前检查其他值,那么我将不得不再次将exists logic
移至该条件的OnSuccessListener
内,依此类推。
还可以从哪里将值true / false返回给原始调用方fnValidate
?
也许我在这里遗漏了一些明显的东西,但是我对理想的结构应该如何感到非常困惑。请在这里告诉我什么是最佳做法。
因此,我需要在
OnSuccessListener
中添加我的存在逻辑。
是,当onSuccess()
触发时,这意味着100%确保从数据库获取数据的操作100%成功,并且您可以根据需要使用该数据。
此外,将来,如果我必须在存在逻辑之前检查其他值,那么我将再次不得不在该条件的OnSuccessListener中移动存在逻辑,依此类推。
是的,异步编程的工作方式。
还可以从哪里将值true / false返回给原始调用方
fnValidate
?
无法通过方法返回数据(fnValidate
)。对于有效的解决方案,请从以下帖子中查看我的答案: