繁体   English   中英

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

[英]Flutter app reciving json file from server

我想将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)

当我尝试从其他服务器(例如http://jsonplaceholder.typicode.com/posts)获取数据时,一切正常,因此我认为应用程序不是问题,而是服务器。 我已经尝试过更改服务器中的Content-Type,但是它没有用。

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

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

为了使它起作用,我需要更改2件事

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM