[android太多事件时如何构造代码

问题描述 投票:0回答:1

我是Firestore的新手,正在学习Android。我面临的问题是关于代码的结构。以下是我的用例:

  1. 用户想要添加新注释,输入注释的标题
  2. 我想检查是否存在其他具有相同标题的音符
  3. 如果是,则不允许,否则创建

以前使用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

也许我在这里遗漏了一些明显的东西,但是我对理想的结构应该如何感到非常困惑。请在这里告诉我什么是最佳做法。

java android google-cloud-firestore
1个回答
0
投票

因此,我需要在OnSuccessListener中添加我的存在逻辑。

是,当onSuccess()触发时,这意味着100%确保从数据库获取数据的操作100%成功,并且您可以根据需要使用该数据。

此外,将来,如果我必须在存在逻辑之前检查其他值,那么我将再次不得不在该条件的OnSuccessListener中移动存在逻辑,依此类推。

是的,异步编程的工作方式。

还可以从哪里将值true / false返回给原始调用方fnValidate

无法通过方法返回数据(fnValidate)。对于有效的解决方案,请从以下帖子中查看我的答案:

© www.soinside.com 2019 - 2024. All rights reserved.