我无法在dart中访问地图上的值

  • 本文关键字:地图 访问 dart dart
  • 更新时间 :
  • 英文 :


我有以下代码,用于处理json.decode()函数生成的映射:

for (var i = 0; i < data[0]["conversation"].length; i++) {
print(data[0]["conversation"][i]["conversationID"]);
print(data[0]["conversation"][i]["startDate"]);
print(data[0]["conversation"][i]["lastActivity"]);
print(data[0]["conversation"][i]["messageCount"]);
for (var j = 0; j < int.parse( data[0]["conversation"][i]["messageCount"] ); j++) {
print(data[0]["conversation"][i]["messages"]["message"][j]);
}
print("n");
}

在最外部的"for"中,一切都很好,问题是在内部的"for"中,当我试图访问一个值时收到错误:

for (var j = 0; j < int.parse( data[0]["conversation"][i]["messageCount"] ); j++) {
print(data[0]["conversation"][i]["messages"]["message"][j]["body"]);
}

这就是错误:

E/flutter ( 1650): [ERROR:flutter/shell/common/shell.cc(181)] Dart Error: Unhandled exception:
E/flutter ( 1650): NoSuchMethodError: The method '[]' was called on null.
E/flutter ( 1650): Receiver: null
E/flutter ( 1650): Tried calling: []("body")
E/flutter ( 1650): #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
E/flutter ( 1650): #1      ChatScreenState.obtenerMensajesArchivados (file:///home/fenrir/Documents/api/lib/chat/chat_page.dart:115:67)
E/flutter ( 1650): <asynchronous suspension>
E/flutter ( 1650): #2      ChatScreenState.initState.<anonymous closure> (file:///home/fenrir/Documents/api/lib/chat/chat_page.dart:157:7)
E/flutter ( 1650): #3      _RootZone.runUnary (dart:async/zone.dart:1379:54)
E/flutter ( 1650): #4      _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
E/flutter ( 1650): #5      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
E/flutter ( 1650): #6      Future._propagateToListeners (dart:async/future_impl.dart:671:32)
E/flutter ( 1650): #7      Future._complete (dart:async/future_impl.dart:476:7)
E/flutter ( 1650): #8      _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
E/flutter ( 1650): #9      _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async/runtime/libasync_patch.dart:33:20)
E/flutter ( 1650): #10     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter ( 1650): #11     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)

示例

data[0]["conversation"][i]["messages"]["message"][j] :
{conversationID: 230, from: 123@localhost, to: 456@localhost, sentDate: 2018-10-18T12:48:05.039Z, body: aloha, roomEvent: false}

print(data[0]["conversation"][i]["messages"]["message"][j].runtimeType); return:
_InternalLinkedHashMap<String, dynamic>

我不知道错误可能是什么,因为在第一个"for"中它对我有效,但在第二个中它不起作用:(

错误是在null上使用["body"],因此对于某个j值,data[0]["conversation"][i]["messages"]["message"][j]必须是null

尝试查找引发此抛出的ij,然后检查"消息"是否列出了预期的元素数量,并且它们都不是null

最新更新