如何保证获取数据是我活动中的第一个操作

时间:2018-03-04 18:51:39

标签: android firebase-realtime-database google-cloud-firestore android-lifecycle

我在我的Android项目Firebase Firestore中使用,在我的一项活动中,我必须获取数据并将其保存在List中以便计算一些内容。问题是,无论我把代码放到哪里获取数据,这个动作总是最后一个(查看Logcat)。因此,当我尝试计算时,我的列表总是空的。如何设置首先检索数据然后继续该过程?有谁知道为什么它总是最后一个过程完成?

对不起,用葡萄牙语说了几句话,但没什么重要的

<ScintKey ScintID="2329" ... />

1 个答案:

答案 0 :(得分:0)

  

有谁知道为什么它始终是最后一道工序?

因为它是异步完成的,你会得到延迟的响应。你应该在calculateonComplete作为for循环之后此方法的最后一行,以确保列表包含元素

    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (DocumentSnapshot document : task.getResult()) {

                            inversores.add(new Inversor((document.getId()),
                                    document.getDouble("alt"),
                                    document.getDouble("larg"),
                                    document.getDouble("ef"),
                                    document.getDouble("potencia"),
                                    document.getString("marca"),
                                    document.getString("empresa"),
                                    document.getString("link"),
                                    document.getBoolean("disponivel")));
                            Log.d("INVERSORES", "ID:" + document.getId() + " => " + document.getData(), task.getException());
                        }
                        calculate();    // call the mothod to calculate;
            } else {
                        Log.d("INVERSORES", "Error getting documents", task.getException());
                    }
                }