【问题标题】:Can't get data from a single field in firebase RTDB using Flutter无法使用 Flutter 从 Firebase RTDB 中的单个字段获取数据
【发布时间】:2020-09-06 01:08:04
【问题描述】:

我正在尝试使用 Flutter 从 Firebase RTDB 读取数据,但似乎无法从特定子级获取值。

我的数据库中有一个链接到 Car 字段的下拉列表,它可以正常工作并提取值:

按下按钮后,我尝试运行查询以使用以下命令将Brand 链接到汽车选择:

void CreateNewDeal(String selectedcar) {
    try{
        print('check car inside function - $selectedcar');
        FirebaseDatabase.instance.reference().child('CarList2').orderByChild('Car').equalTo(selectedcar).once().then((DataSnapshot snap) {
            print('${snap.value['Brand']}');
        });

    }catch(e){
      print('error in reading the brand');
    }
}

我在 print 语句中不断得到一个空值。

但是,如果我更改打印语句以删除 `['Brand]' 它会检索特定节点的完整树。

如何只检索相应“汽车”的“品牌”。


编辑: 我尝试仅使用 $snap.value 运行代码,这将返回特定孩子的整个树。然后当我将打印更改为print(snap.value[0]['Brand']) 时,如果我要选择链接到树中项目 0 的汽车,它会打印品牌。如果我将其更改为在下拉列表中选择的任何其他汽车,它不会给我品牌并返回 null。我虽然可能与 0 索引有关,所以我特意选择了第 1 项并将打印更改为 snap.value[1]['Brand'],但这也不起作用。

这不可能为空,因为当我物理检查数据库时,值是存在的。我不确定为什么它适用于第 0 项而不适用于其他项目


编辑

我遇到此问题的原因是我的树的设置方式。我做了进一步的调查,最终不得不改变上面我的​​树截图中看到的索引。

如果需要,请参阅下面关于如何重组树的其他问题和答案。

Flutter - Firebase RTDB read issue for node at index 0, 1 and 2

【问题讨论】:

  • 尝试打印snap.value[selectedcar]
  • @SanjaySharma,这不起作用,应该,因为“selectedcar”是该字段的value,而不是该字段的name
  • 对不起,我的错,你有没有在调试模式下检查snap的长度
  • @SanjaySharma,它肯定会返回值。如前所述,如果我打印snap.value,它将返回我的树中的所有值。我可以将它添加到List<dynamic> 并打印列表。尝试提取特定字段“品牌”或导致 null 的任何其他字段的问题不应该是这种情况,因为字段中有数据
  • @SanjaySharma,当打印 snapshot.value 时,控制台中打印的开头似乎有一个空值。知道那是什么吗?[null, { Brand: Alfa Romeo, Car: Alfa Romeo Guilia 2.0T Standard Automatic Petrol Sedan RWD}]

标签: flutter firebase-realtime-database dart


【解决方案1】:

这与错误地设置数据库有关。你必须使用索引。请看我的另一个问题,它指出了这样做的方法

Flutter - Firebase RTDB read issue for node at index 0, 1 and 2

【讨论】:

    猜你喜欢
    • 2020-09-17
    • 2022-09-23
    • 2020-12-18
    • 2020-10-10
    • 2021-07-10
    • 2022-12-18
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多