无法将 _InternalLinkedHashMap<Object?, Object?> 转换为任何内容
Can't cast _InternalLinkedHashMap<Object?, Object?> to anything
我在从 Firebase RealtimeDatabase 获取数据作为地图时遇到了一些问题,尽管我首先将其作为地图上传。我看到的所有解决方案都是您应该将 The snapshot.value 转换为传入数据类型,但没有迭代对我有用。我已经能够在快照值上调用 toString()
并且我已经验证它是一个 Map 但编译器甚至不允许我将它转换为 Map 更不用说 运行 它了。如果我尝试使用 dynamic 来防止编译错误,我仍然会得到这个 Unhandled Exception: type '_InternalLinkedHashMap<Object?, Object?>' is not a subtype of type 'Map<String, dynamic>?' in type cast
.
这就是我所做的,
Future<Map<String, dynamic>> getBasicDetail(
DatabaseReference databaseReference) async {
DatabaseReference imageURLevent = databaseReference.child('basicDetail');
final snapShot = await imageURLevent.get();
return Map<String, dynamic>.from(
snapShot.value as Map<String, dynamic>? ?? {});
}
Future<void> readProfileData({required String userId}) async {
DatabaseReference ref = FirebaseDatabase.instance.ref("users/$userId");
final basicDetail = await getBasicDetail(ref);
// Print the data of the snapshot
debugPrint(basicDetail.toString());
}
我尝试了解析此数据的所有可能组合,但没有任何效果。由于某些原因,在示例和视频中,当您将右侧投射到 Map<String,dynamic>
时,您不会收到任何错误,但我的 IDE 甚至不允许我这样做。我也试过 Map.from() 似乎是一个流行的方法,但我的简单抛出一个 运行 时间错误。
为什么会这样 from https://www.youtube.com/watch?v=sXBJZD0fBa4&ab_channel=Firebase
我一边工作
不是吗?
事件。snapshot.value 看起来也有效
[log] {bloodGroup: gh, imageURL: /data/user/0/com.piyushlimited.buzzai/app_flutter/image_picker7287835118545461685.jpg, fullName: Henry Nana Adu, weight: 523, dateOfBirth: 11/11/11, licenseNumber: 256489, age: 28}
我可以通过引用数据的完整路径来访问一个数据值,但是我有一个很大的地图,我无法对每个类别中的每个值都这样做。这似乎很昂贵并且浪费时间。我花了几天时间尝试了很多东西,所以请记住这一点。
我认为发生这种情况是因为 event.snapshot.value
返回了 Map.from 不期望的内容。基本上 Map.from 需要一个 Map 这样你就可以将你的数据转换为相同的。
尝试将您的线路更改为
final data = Map<String, dynamic>.from(event.snapshot.value as Map<dynamic, dynamic>);
感谢大家的回复。特别感谢@Stelios Papamichail 3 个月前提供的解决方案。 很遗憾官方开发团队没有注意到这一点。 jsonDecode(jsonEncode(event.snapshot.value)));
完美运行。这可能是糟糕的表现,但我现在并不在乎,我只是很高兴它确实如此。我也不知道为什么会这样。
现在可以完美运行了
Future<void> readProfileData({required String userId}) async {
DatabaseReference ref = FirebaseDatabase.instance.ref("users/$userId");
try {
final DataSnapshot? snapShot = await ref.get();
Map<String, dynamic> data = jsonDecode(jsonEncode(snapShot?.value));
userProfile = UserProfile.fromMap(data);
setGender(userProfile.gender);
notifyListeners();
log(userProfile.toString());
} on Exception catch (e) {
log(e.toString());
}
}
希望更多人看到,不要像我一样浪费生命。
解法:
如果您在 FIREBASE 数据库中有数据,
例如:Please Click Here to Check ScreenShot
那么截至目前,2022 年 3 月 12 日:
要从 Firebase 数据库中检索数据,您必须使用以下示例代码。
String name = (snap.snapshot.value as Map)["name"];
print("name :: $name");
检查带有完整示例代码的完整示例:
例如:用于从数据库中检索姓名和电子邮件。
Please click here to Check the Complete Code Sample Screenshot
我在从 Firebase RealtimeDatabase 获取数据作为地图时遇到了一些问题,尽管我首先将其作为地图上传。我看到的所有解决方案都是您应该将 The snapshot.value 转换为传入数据类型,但没有迭代对我有用。我已经能够在快照值上调用 toString()
并且我已经验证它是一个 Map 但编译器甚至不允许我将它转换为 Map 更不用说 运行 它了。如果我尝试使用 dynamic 来防止编译错误,我仍然会得到这个 Unhandled Exception: type '_InternalLinkedHashMap<Object?, Object?>' is not a subtype of type 'Map<String, dynamic>?' in type cast
.
这就是我所做的,
Future<Map<String, dynamic>> getBasicDetail(
DatabaseReference databaseReference) async {
DatabaseReference imageURLevent = databaseReference.child('basicDetail');
final snapShot = await imageURLevent.get();
return Map<String, dynamic>.from(
snapShot.value as Map<String, dynamic>? ?? {});
}
Future<void> readProfileData({required String userId}) async {
DatabaseReference ref = FirebaseDatabase.instance.ref("users/$userId");
final basicDetail = await getBasicDetail(ref);
// Print the data of the snapshot
debugPrint(basicDetail.toString());
}
我尝试了解析此数据的所有可能组合,但没有任何效果。由于某些原因,在示例和视频中,当您将右侧投射到 Map<String,dynamic>
时,您不会收到任何错误,但我的 IDE 甚至不允许我这样做。我也试过 Map.from() 似乎是一个流行的方法,但我的简单抛出一个 运行 时间错误。
为什么会这样
我一边工作
事件。snapshot.value 看起来也有效
[log] {bloodGroup: gh, imageURL: /data/user/0/com.piyushlimited.buzzai/app_flutter/image_picker7287835118545461685.jpg, fullName: Henry Nana Adu, weight: 523, dateOfBirth: 11/11/11, licenseNumber: 256489, age: 28}
我可以通过引用数据的完整路径来访问一个数据值,但是我有一个很大的地图,我无法对每个类别中的每个值都这样做。这似乎很昂贵并且浪费时间。我花了几天时间尝试了很多东西,所以请记住这一点。
我认为发生这种情况是因为 event.snapshot.value
返回了 Map.from 不期望的内容。基本上 Map.from 需要一个 Map
尝试将您的线路更改为
final data = Map<String, dynamic>.from(event.snapshot.value as Map<dynamic, dynamic>);
感谢大家的回复。特别感谢@Stelios Papamichail 3 个月前提供的解决方案。 jsonDecode(jsonEncode(event.snapshot.value)));
完美运行。这可能是糟糕的表现,但我现在并不在乎,我只是很高兴它确实如此。我也不知道为什么会这样。
现在可以完美运行了
Future<void> readProfileData({required String userId}) async {
DatabaseReference ref = FirebaseDatabase.instance.ref("users/$userId");
try {
final DataSnapshot? snapShot = await ref.get();
Map<String, dynamic> data = jsonDecode(jsonEncode(snapShot?.value));
userProfile = UserProfile.fromMap(data);
setGender(userProfile.gender);
notifyListeners();
log(userProfile.toString());
} on Exception catch (e) {
log(e.toString());
}
}
希望更多人看到,不要像我一样浪费生命。
解法:
如果您在 FIREBASE 数据库中有数据, 例如:Please Click Here to Check ScreenShot
那么截至目前,2022 年 3 月 12 日:
要从 Firebase 数据库中检索数据,您必须使用以下示例代码。
String name = (snap.snapshot.value as Map)["name"];
print("name :: $name");
检查带有完整示例代码的完整示例: 例如:用于从数据库中检索姓名和电子邮件。 Please click here to Check the Complete Code Sample Screenshot