【问题标题】:Dart Truncates HttpClientResponseDart 截断 HttpClientResponse
【发布时间】:2018-10-18 02:49:00
【问题描述】:

这几天一直在尝试解决这个问题。该代码成功地为我提供了 JSON 数据,但缺少很多块,使我无法将其解析为对象。代码和输出如下。研究了很多,欢迎提出任何建议。

  class TBAState extends State<TBAData>{
  String url = "http://www.thebluealliance.com/api/v3/status";
  HttpClient myhttp = new HttpClient();
  List data;
  List cellTitle;

  Future getSWData() async {

    myhttp.getUrl(Uri.parse(url)).then((HttpClientRequest request) {
      request.headers.set("accept", "application/json");
      request.headers.set("X-TBA-Auth-Key", "XXXXX");
      return request.close();
    }).then((HttpClientResponse response) {
      response.transform(utf8.decoder).listen((contents) {
       // print(contents);
      });
    });
    myhttp.get('www.thebluealliance.com', 80, '/api/v3/teams/0/simple') 
    .then((HttpClientRequest request){
      request.headers.set("accept", "application/json");
      request.headers.set("X-TBA-Auth-Key", "XXXX");
    return request.close();
    })
      .then((HttpClientResponse response) {

      response.transform(utf8.decoder).listen((content) {
        //buffer.writeAll(content.toString());
        print(content);

        });

    });
  }
}

一些输出:

“团队编号”:6 },

{

颤振:布鲁克曼和帕克维尔高中和数学中心,

科学和计算机科学”,

“昵称”:“Team007”,

"state_prov": "MD",

“团队编号”:7

},

{


 Error: 
Dart Error: Unhandled exception:
FormatException: Unterminated string (at line 42, character 155)
...y/US Army Aberdeen Test Center/Moffatt & Nichol/Baltimore Area Alliance/Mr.
^
#0      _ChunkedJsonParser.fail (dart:convert/runtime/libconvert_patch.dart:1358:5)
#1      _ChunkedJsonParser.close (dart:convert/runtime/libconvert_patch.dart:504:9)
#2      _parseJson (dart:convert/runtime/libconvert_patch.dart:30:10)
#3      JsonDecoder.convert (dart:convert/json.dart:540:36)
#4      JsonCodec.decode (dart:convert/json.dart:167:41)
#5      TBAState.getSWData

【问题讨论】:

  • 如果你用postman之类的HTTP工具检查,你会得到同样的结果吗?
  • @JacobPhillips 我以前从未使用过 Postman,但我不是 API 的所有者,不确定这是否会有所作为。令人沮丧的问题,因为它会在随机位置截断部分。
  • @JacobPhillips 更新,使用 Postman 测试并返回正确的 JSON,因此使用 Dart 进行的某些事情,而不是 API 工作正常。还是卡住了。
  • 日志输出经常被截断。而是调查调试器中的响应。
  • @GünterZöchbauer 对不起,我不明白。你能说得更具体点吗?

标签: json dart flutter httpresponse


【解决方案1】:

已修复:问题出在 HttpClientResonse 的转换中。正确代码:

class TBAState extends State<TBAData>{

  HttpClient myhttp = new HttpClient();
  List<dynamic> data;
  List cellTitle;
  List<Team> teamData;

  Future getSWData() async {


    myhttp.get('www.thebluealliance.com', 80, '/api/v3/status').then((HttpClientRequest request) {
      request.headers.set("accept", "application/json");
      request.headers.set("X-TBA-Auth-Key", "XXXX");
      return request.close();
    }).then((HttpClientResponse response) {
      response.transform(utf8.decoder).listen((contents) {
       //print(contents);
      });
    });
    myhttp.get('www.thebluealliance.com', 80, '/api/v3/teams/0/simple') 
    .then((HttpClientRequest request) {
      request.headers.set("accept", "application/json");
      request.headers.set("X-TBA-Auth-Key", "XXXX");
    return request.close();
    })
      .then((HttpClientResponse response) {
       response.transform(utf8.decoder).transform(json.decoder).listen((data) {
        print(data.toString());
        setState(() {
        TeamList myTeamsL = new TeamList.fromJson(data);
        teamData = myTeamsL.teams;
                });

      });

    });
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 2012-06-02
    • 2021-05-11
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 2016-07-15
    • 2023-03-31
    相关资源
    最近更新 更多