当前位置: 首页 > 面试题库 >

如何在不指定父文件夹/引用的情况下遍历Datasnapshot

许波涛
2023-03-14
问题内容

我想遍历具有以下结构的数据快照:

 {
"data" : {
"images" : {
  "fw88v6xu6wybamg9zzt6" : {
    "0550e909-3b30-4f83-9725-02fbe45b74ce" : 3,
    "address" : "http://xxxxxxxxxxxxxxx.jpg",
    "author" : "username1",
    "author_id" : "0550e909-3b30-4f83-9725-02fbe45b74ce",
    "location" : "0",
    "rating" : 3
  },
  "osgm6v7kfcjwogo5uv21" : {
    "0550e909-3b30-4f83-9725-02fbe45b74ce" : 4,
    "address" : "xxxxxxxxxxxxxxxx.jpg",
    "author" : "username1",
    "author_id" : "0550e909-3b30-4f83-9725-02fbe45b74ce",
    "location" : "0",
    "rating" : 4
  },
  "prhpcbrrru7z8x6xtolq" : {
    "0550e909-3b30-4f83-9725-02fbe45b74ce" : 6,
    "address" : "xxxxxxxxxxxxxx.jpg",
    "author" : "username2",
    "author_id" : "0550e909-3b30-4f83-9725-02fbe45b74ce",
    "location" : 0,
    "rating" : 6
  }
},
"locations" : {
  "location1" : {
    "author" : "0550e909-3b30-4f83-9725-02fbe45b74ce",
    "latitude" : 11.42222573,
    "longitude" : 58.4348011
  },
  "location2" : {
    "author" : "0550e909-3b30-4f83-9725-02fbe45b74ce",
    "latitude" : 11.42222573,
    "longitude" : 38.4333311
  }
 }
}

具体来说,我正在做的是获取Data / Images子级的快照,因此这将是具有自动生成的引用的三个条目,例如,fw88v6xu6wybamg9zzt6
因此我无法访问特定条目来检索作者的地址,因此我做了我的应用程式

    Iterable<DataSnapshot> imagesDir = snapshot.getChildren();

而且我不确定如何遍历此快照的每个条目并在不知道父引用的情况下检索条目的信息。(fw88v6xu6wybamg9zzt6)?

感谢克里斯,感谢他向我发送了正确的搜索路径,但仍然无法构建正确的语法来实现我的目标。

现在,我的方法如下:

  public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot child: snapshot.getChildren()) {
                Log.i("MyTag", child.getValue().toString());
                imagesDir.add(String.valueOf(child.getValue()));
            }
            Log.i("MyTag", imagesDir.toString());

从第一个日志中,我得到每个节点的所有值的字符串,在第二个日志中,我构造了一个包含所有节点的数组。

我想做的是onDataChange每次在子对象上迭代时,将一个特定的节点(例如地址值)添加到我在方法外部声明的ArrayList中。因此,在for循环结束时,在这种情况下,我将在arraylist中只有三个地址(只有值)。

为了做到这一点,构造for循环的正确方法是什么?

好吧,我到达并给出正确结果的最终代码如下:

              public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot child: snapshot.getChildren()) {
                Log.i("MyTag", child.getValue().toString());
                imagesDir.add(child.child("author").getValue(String.class));
            }
            Log.i("MyTag_imagesDirFinal", imagesDir.toString());

问题答案:

假设您将附加ValueEventListenerimages

public void onDataChange(DataSnapshot imagesSnapshot) {
    for (DataSnapshot imageSnapshot: imagesSnapshot.getChildren()) {
        imagesDir.add(imageSnapshot.child("address").getValue(String.class));
    }
    Log.i("MyTag", imagesDir.toString());
}


 类似资料:
  • 问题内容: 我有一个定义自己的枚举的类,如下所示: 如果指定MyEnum.E1,它可以正常工作,但我真的很想将其作为“ E1”。您知道如何实现此目的,还是必须在另一个文件中定义它才能起作用? 结论:我无法正确获取导入的语法。由于有几个答案表明这是可能的,因此我将选择一个为我提供所需语法的文件,并对其他文件进行投票。 顺便说一下,这是一个真正的STRANGE部分(在我执行静态导入之前),我编写的使用

  • 在CSV文件中写入时,会自动创建文件夹,然后创建具有神秘名称的csv文件,如何使用任何特定名称创建此CSV,但无需在pyspark而不是熊猫中创建文件夹。

  • 我想提取Unix tar xvf/home/test/group中的tar文件。tar和提取后得到一个文件夹组,其中包含xls、pdf和txt文件列表。 我怎样才能提取内容的group.tar /home/test/list的xls, pdf文件没有创建组文件夹。 任何特定的命令可用或必须跟随复制和移动?? 谢啦!

  • 本文向大家介绍python遍历文件夹,指定遍历深度与忽略目录的方法,包括了python遍历文件夹,指定遍历深度与忽略目录的方法的使用技巧和注意事项,需要的朋友参考一下 背景 需要在文件夹中搜索某一文件,找到后返回此文件所在目录。用最常规的os.listdir()方式实现了一版,但执行时报错:递归超过最大深度。于是自己添加了点功能,之所有写此函数是为了让它适应不同的项目,因为有项目要找的文件在第一层

  • 在具有父子指针的通用树结构中,是否可以在不遍历完整树的情况下遍历叶节点?例如,从最左边的叶节点开始。想法是在深树上进行优化。

  • 本文向大家介绍PHP递归遍历指定文件夹内的文件实现方法,包括了PHP递归遍历指定文件夹内的文件实现方法的使用技巧和注意事项,需要的朋友参考一下 今天早上在地铁上看了关于文件和文件夹的一章,正好最近刚搞懂linux的文件系统,觉得对文件属性的访问跟Shell命令很像,所以想晚上来实践一下。 发现php的文件夹函数好像没有提供遍历文件夹下的所有文件(包括子目录中的文件),于是,就想自己实现一个。 在写