从Firestore中读取数组,并将它们放入Android Studio中的ArrayList-Java中



我正在尝试创建一个应用程序,它可以从Firestore数组中读取值,并将它们放入ArrayList或其他东西中,这是我的代码:

ArrayList<Integer> driverPermissions = new ArrayList<>();
Firestore.collection("Admins").document("1234567890").get().addOnCompleteListener(task -> {
DocumentSnapshot document = task.getResult();
driverPermissions = document.get("Test");
});

不幸的是,它不起作用。这一行把我标记为错误:

driverPermissions = document.get("Test");

错误是:

lambda表达式中使用的变量应该是最终的或有效的最终

如何将Firestore上数组内的值添加到ArrayList或类似的东西中,然后在整个代码中使用它?而且不仅仅是在方法上?

试试这个

driverPermissions = document.getString("Test");

lambda表达式中使用的变量应该始终是final或实际上是final,并且不能更改这一点。要解决此问题,您可以将变量作为类的成员,也可以在onComplete()中定义并初始化它。

如何将Firestore上数组中的值添加到ArrayList或类似的东西中,然后在整个代码中使用它?而且不仅仅是在方法上?

你不可能做到这一点。Firebase API是异步的,这意味着任何需要来自Cloud Firestore的数据的代码都需要在onComplete()方法内部,或者从那里调用。即使字段是类的成员,也不能简单地在回调之外使用它。因此,为了解决这个问题,您可以使用自定义回调,如该答案所示。原因是您需要等待数据。如果你了解Kotlin,你可能也有兴趣阅读以下资源:

  • 如何使用get((从Cloud Firestore读取数据

在Java中,您应该考虑使用LiveData。我认为回购可能也会有所帮助。

第页。S.如果你需要在某个时间点使用一组对象,这里有另一个有用的资源:

  • 如何将Cloud Firestore中的对象数组映射到对象列表

您试图获取数据类型String,但第一个错误是声明了Array tn Integer。

然后试试这个

Firestore.collection("Admins").document("1234567890").get().
addOnCompleteListener(task -> {
DocumentSnapshot document = task.getResult();
ArrayList<String> driverPermissions = (ArrayList<String>) 
document.get("Test");
});

在这里,您只能存储字符串类型的数据。

或者你可以试试这个

ArrayList<Object> driverPermissions = New ArrayList<>();
Firestore.collection("Admins").document("1234567890").get().
addOnCompleteListener(task -> {
DocumentSnapshot document = task.getResult();
driverPermissions.add(new String(document.get("Test")); // When Storing STring
driverPermissions.add(new Integer(document.get("Test")); // When Storing Integer
});

在这里,你可以存储任何类型的数据,可以是整数,也可以是字符串,但你必须声明你存储的是什么类型的数据。

按需方式

ArrayList<String> driverPermissions = New ArrayList<String>();
Firestore.collection("Admins").document("1234567890").get().
addOnCompleteListener(task -> {
DocumentSnapshot document = task.getResult();
driverPermissions.add(document.get("Test")); Or
driverPermissions.add(""+document.get("Test"));
});

另一种方式

ArrayList<String> driverPermissions;
Firestore.collection("Admins").document("1234567890").get().
addOnCompleteListener(task -> {
DocumentSnapshot document = task.getResult();
driverPermissions = (ArrayList<String>) 
document.get("Test");
});

最新更新