Flutter应用程序从服务器接收json文件

时间:2019-03-05 13:19:54

标签: android node.js json flutter

我想将json数据从我的服务器(只是一些基本的节点js服务器)发送到我的应用程序,我想在控制台中看到我已接收到该数据并打印出来。

Json文件(仅此而已,没什么特别的)

[
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "ea molestias quasi exercitationem repellat qui ipsa sit aut",
    "body": "et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et labore et velit aut"
  }

]

服务器代码

var http=require('http');
var fs=require('fs');
var file=fs.readFileSync('tmp.json','utf8'); //tmp is name of my json file
var server=http.createServer(function(req,res)
{
 res.writeHead(200,{'Content-Type': 'text/plain'}); 
 res.end(file);  
});
server.listen(3000,'127.0.0.1'); 

Flutter应用程序中的代码,负责获取文件并进行打印

class AwesomeButtonState extends State<AwesomeButton>
{
  Future<String>GetData() async
  {
    var responce=await http.get(
      Uri.encodeFull("127.0.0.1:3000"),
      headers: {
      "Accept": "text/json" 
      }
    );
    //print(responce.body);
    List data= json.decode(responce.body); //konwersja na liste
    print(data[1]["title"]); 
      }

  }

我收到的错误是:

ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: FormatException: Scheme not starting with alphabetic character (at character 1)

当我尝试从其他服务器e.x获取数据时。 http://jsonplaceholder.typicode.com/posts一切正常,所以我认为应用程序无关,而是服务器。我已经尝试过更改服务器中的Content-Type,但是没有用。

2 个答案:

答案 0 :(得分:1)

“方案不是以字母字符开头(在字符1处)”错误表明您的架构(= url)不正确。 尝试致电

http.get("http://127.0.0.1:3000"....

答案 1 :(得分:0)

要使其正常工作,我需要更改2件事

  1. 在我的本地主机IP地址之前添加http://
  2. 将代码中的localhost ip地址更改为10.0.2.2:[port],因为这就是android

所以最终的工作代码行看起来像[在flutter应用中]

Uri.encodeFull("http://10.0.2.2:3000")