我正在尝试从一个API中获取数据。为了测试,我使用了API URL:https://jsonplaceholder.typicode.com/todos/1其中包含以下JSON对象:
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
我在网上遵循了一个例子,几乎只是调整以匹配我想要的工作流,但是下面的snapshot.hasData
返回false。
class Home extends StatelessWidget {
final String accountNum;
Home(this.accountNum);
final String apiUrl = "https://jsonplaceholder.typicode.com/todos/";
Future<Map<String, dynamic>> fetchData() async {
//accountNum below is passed from a previous screen, in this case I pass '1'
//I printed it to make sure that '1' is passed and it is correct
var result = await http.get(apiUrl+accountNum);
//I printed the below and it also gave me the json from the api
//print(json.decode(result.body));
return json.decode(result.body);
}
String _MeterNum(dynamic account){
return account['title'];
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Account Data'),
),
body: Container(
child: FutureBuilder<Map<String, dynamic>>(
future: fetchData(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if(snapshot.hasData){
print(_MeterNum(snapshot.data[0]));
return ListView.builder(
padding: EdgeInsets.all(8),
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index){
return
Card(
child: Column(
children: <Widget>[
ListTile(
leading: CircleAvatar(
radius: 30,
backgroundImage: NetworkImage(snapshot.data[index]['picture']['large'])),
//I realize this will just show the same thing
//but I was just keeping the format of the example I was following
title: Text(_MeterNum(snapshot.data[index])),
subtitle: Text(_MeterNum(snapshot.data[index])),
trailing: Text(_MeterNum(snapshot.data[index])),
)
],
),
);
});
}else {
return Center(child: CircularProgressIndicator());
}
},
),
),
);
}
}
返回的是模拟器屏幕上的CircularProgressIndex ator()
,指示snapshot.hasData
为false。我在控制台上没有任何错误,所以我不知道如何继续。
---编辑---使用评论员的建议对上述代码进行了更改:
从未来更改了返回类型
现在我得到了以下错误:
在构建FutureBuilder时抛出以下NoSuchmethod odError
对null调用了方法“[]”。收件人:空
尝试呼叫:[](“标题”)
改变
title: Text(_MeterNum(snapshot.data[index])),
subtitle: Text(_MeterNum(snapshot.data[index])),
trailing: Text(_MeterNum(snapshot.data[index])),
到
title: Text(_MeterNum(snapshot.data)),
subtitle: Text(_MeterNum(snapshot.data)),
trailing: Text(_MeterNum(snapshot.data)),
没有键为['picture']['large'],因此请在ListTile中注释掉该键
在检查hasData之前,请执行以下操作:
if (snapshot.connectionState == ConnectionState.done) {
// your code
}
编辑
你的要求
var result = await http.get(apiUrl+accountNum);
返回JSON对象而不是JSON列表。但在将fetchData方法更新到将来之前,它的返回类型是List
Future<Map<String, dynamic>> fetchData() async {
var result = await http.get(apiUrl+accountNum);
return json.decode(result.body);
}
不需要json。解码(result.body)['results'],因为您只获取对象,而不是列表。
API响应是一个JSON对象
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
并且只包含userId
,id
,title
和完成的
memebers
不要引用索引,请考虑从对象中获取。
代替
snapshot.data[index]
具有
snapshot.data
而且
snapshot.data['picture']['large']
JSON对象中没有picture
数据,请尝试注释该代码或向其添加图片
问题内容: 我以前使用过媒体播放器,但从未遇到过此问题。每当我尝试使用MediaPlayer.create()时,该方法都会使我为null,并且无法播放声音。有什么我想念的吗? 我的sound.mp3在我的原始文件夹中,通过将声音拖到eclipse中的文件夹中,我将其放置在其中。请帮忙,因为我以前玩过声音,所以这真的困扰我:( 问题答案: 如果create() API由于某种原因失败,则返回nul
问题内容: 我正在尝试读取HTTP请求的授权标头(因为我需要向其添加一些内容),但是标头值始终为null。其他标头工作正常。 难道我做错了什么?这是“安全”功能吗?有没有办法使它与URLConnection一起使用,还是需要使用另一个HTTP客户端库? 问题答案: 显然,这是安全的“功能”。URLConnection实际上是sun.net.www.protocol.http.HttpURLConn
问题内容: 我在Java Web应用程序中具有以下结构: 在中WS.java,我在Web方法中使用以下代码: 但是它总是返回null。我需要读取该文件,并且我读到如果将文件放入其中,则可以使用进行访问,但是该方法始终返回null。 对我可能做错的任何想法? 它正在工作,但是当我Clean and Build在Project上执行了a之后,它突然停止工作了 问题答案: 据我所知,该文件必须正确地放置
Selenium<代码>列表 代码段: ====================================================================== 我使用,但它也不起作用
这让我快疯了。我有一个简单的eclipse项目,其中有一个src文件夹和一个类。但我似乎无法让getResource找到它。我做错了什么? 如果我右键单击类名,路径是testsprroject/src/ContextTest。java,根据运行配置中的classpath选项卡,默认的类路径是TestProject。 它不适用于
我一直在尝试使用nativescript创建一个android应用程序。我正在使用fetch模块从服务器获取响应。当我试图从httpbin获得响应时。org/get,没关系。但当我试图从本地服务器获取响应时,网络请求失败。错误 发送到httpbin。组织/获取- 发送到本地主机:8000/api- 当我尝试从纯节点中的localhost:8000/api获取响应时。js通过请求模块。它工作得很好。