想知道这里有人可以提供帮助吗?
使用Polymer Dart我已经设置了一个服务来使用以下代码加载Json feed:
Future loadService(){
return HttpRequest.getString(_serviceURL)
.then(buildView)
.catchError(handleError);
}
当执行此代码时,它确实成功点击了我的buildView函数,但是我也从我的句柄错误函数中打印出错误:
void handleError(Error error){
print(error);
}
我的json Feed中有3个项目:
[
{
"module": "module-1",
"data": {
"title": "Dynamic Title 1",
"text": "This is the dynamic text for content block 1."
}
},
{
"module": "module-2",
"data": {
"title": "Dynamic Title 2",
"text": "This is the dynamic text for content block 2."
}
},
{
"module": "module-3",
"data": {
"title": "Dynamic Title 3",
"text": "This is the dynamic text for content block 3."
}
}
]
我得到的错误是:“RangeError:3”。
我找不到很多关于可能导致这种情况的信息。它似乎并没有阻碍我的应用程序,但我想尽可能清除它。如果有人有任何建议,我会全力以赴。
谢谢!
编辑:根据GünterZöchbauer的建议
现在我明白.catchError()函数会从.then()函数中捕获错误。我认为它只会捕获HttpRequest本身失败的错误。
在buildView中,我使用for循环遍历json对象:
void buildView(String jsonString){
contentBlocks = JSON.decode(jsonString);
DivElement wrapper = $['content-modules-wrapper'];
for(int i=0; i < contentBlocks.length; i++){
Element element = new Element.tag(contentBlocks[i]['module']);
wrapper.children.add(element);
}
}
哪个是错的,因为.length接受JSON字符串长度(300个字符)我觉得有点奇怪,因为我已经将它转换为对象..无论如何,我通过将函数更改为此来修复它:
void buildView(String jsonString){
contentBlocks = JSON.decode(jsonString);
DivElement wrapper = $['content-modules-wrapper'];
contentBlocks.forEach((block){
Element element = new Element.tag(block['module']);
wrapper.children.add(element);
});
}
有没有办法像我想要的那样获取json对象中的项目数,或者你应该总是使用forEach()来循环它?
答案 0 :(得分:2)
此错误可能来自您的buildView
。结果的索引是从0到2而不是从1到3。