OnCompleteListener值变为null

时间:2018-12-10 14:16:42

标签: android firebase google-cloud-firestore

我正在尝试在我的Firebase数据库中下载一个子集合,并将文档ID保存到称为电子邮件的数组列表中。下载似乎可以正常工作,但是onComplete结束后,所有值都变为null。我调用set方法来设置我的类变量,但是它似乎不起作用 这是我的数据库图片。image

convert_inner_shell_to_polyhedron

编辑 数据确实已下载 temp download

但是,在oncomplete结束后,即使调用setEmails,电子邮件也为空 empty emails

EDIT2:仍然无法解决问题,对于任何有相同问题的人,我通过将我需要的所有功能放在oncomplete侦听器中来解决。绝对不是最佳解决方案,但是如果您紧要关头,那就足够了。

1 个答案:

答案 0 :(得分:0)

对于回复评论来说太多了,但是您可能正在处理指针问题。虽然看起来很奇怪。让我们考虑以下潜力。

您正在处理一个指针。

您正在创建一个寿命范围等于回调的指针。

然后,您将本地指针设置为该变量。然后,您将超出范围。可视化这种情况(可能的情况,但不太可能)。

-->callbackScope
------>tempArray
-------->addItems
------>emailArray = tempArray memory location
-->outofScope -> tempArray garbage collection = null
aka emailArray was garbage collected = null

-->classScope
------>myEmailArray = tempArray

要解决此问题,您可能需要创建元素并将其添加到类范围的数组中。 试一试,让我知道是否能解决您的问题,否则,我将删除此答案,只是想给您一些尝试,但注释中不适合。

尝试一下:

 ArrayList<QueryDocumentSnapshot> myResults = task.getResult()
 for (QueryDocumentSnapshot document : myResults){
     getEmails().add(document.getId());
 }