【问题标题】:get an array from a map of arrays (in firestore)从数组映射中获取一个数组(在firestore中)
【发布时间】:2026-02-01 03:05:01
【问题描述】:

我正在制作一个用于学习西班牙语读写的安卓应用。 我正在尝试从 firestore 获取数组映射。在那里,我有一个文档,其中包含一个名为“levels”的字段,其中包含地图。像这样:

级别:{ 1:“爸爸”,“妈妈”, 2:“地图”, 3:“卡玛”、“卡萨” }

see firebase data structure here

我是这样获取地图的:

HashMap <String, String[]> levelsMap = new HashMap<String, String[]>();
levelsMap = (HashMap<String, String[]>) documentSnapshot.get("levels");

到目前为止,在调试时,地图已经正确获取并放入levelsMap变量中。

调试器显示如下:

see debugger screenshot here

levelsMap={HashMap@13651} size:3

"1" -> {ArrayList@13656}  size = 2
  key = "1"
  value = {ArrayList@13656}  size = 2
    0 = "papa"
    1 = "mama"

"2" -> {ArrayList@13673}  size = 1
 key = "2"
 value = {ArrayList@13673}  size = 1
  0 = "mapa"

"3" -> {ArrayList@13675}  size = 1
 key = "3"
 value = {ArrayList@13675}  size = 1
  0 = "cama"

然后,当我尝试从 levelsMap 中获取一个数组时,正如调试器所说的那样,它是一个 arrayList,我尝试使用以下行获取它

List<String> levels = levelsMap.get("1");

但 android studio 指出一个错误。它说变量“levels”需要一个列表,但它得到一个数组。那么我尝试以下(正如android studio建议的那样)

String[] level1 = levelsMap.get("1");

这次 android studio 没有指出错误,但应用程序在该行崩溃。 控制台中的错误说:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String[]

所以,这些行似乎都不起作用。那么,如何获取关卡数组呢?

【问题讨论】:

  • 如果应用程序崩溃,Android Studio 应该在 Logcat 中显示原因。请张贴输出。

标签: java android arrays arraylist google-cloud-firestore


【解决方案1】:
List<Map<String, Object>> levels = (List<Map<String, Object>>) doccumentSnapshot.get("levels");
List<String> name = Arrays.asList(levels.get("1"));

【讨论】:

  • 用那一行我仍然得到一个错误:java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Object[]
  • 在 firestore 截屏你的数据结构
  • 如果我把它和你说的一样,它会用红色标记数字“1”的分号。它说它应该是一个 int 并且它得到一个字符串。当我去掉分号时,它会在 (=) 符号右侧的整个表达式下划线。告诉我它需要一个“List ”并提供一个“List >”
  • 然后我尝试将您建议的第二行替换为以下行: List name = (List) levels.get(1);这次,android 没有标记红色,但是当我运行该应用程序时,它会在您建议的行的第一行引发以下错误。 :( java.lang.ClassCastException: java.util.HashMap 不能转换为 java.util.List
  • 在 Firestore 控制台截屏你的数据结构
【解决方案2】:

终于!我用以下几行解决了它:

levelsMap = new HashMap<String, List<String>>();
levelsMap = (HashMap<String, List<String>>) documentSnapshot.get("levels");

那么,得到一个整级数组:

List<String> level1 = levelsmap.get("1");

结果:level1 = {0:papa, 1:mama}

那么,得到一个单词:

String word = levelsmap.get("1").get(0);

结果:word = papa

【讨论】: