想知道这里是否有人可以帮忙?
使用Polymer Dart,我已经设置了一个服务,使用以下代码加载Json提要:
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
现在我理解了。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()?
此错误可能来自您的buildView
。查询结果的索引为0 ~ 2,而不是1 ~ 3。