Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振如何解码一个非常大的json数组,颤振只解码前20项?_Flutter_Http_Dart_Flutter Animation_Dio - Fatal编程技术网

Flutter 颤振如何解码一个非常大的json数组,颤振只解码前20项?

Flutter 颤振如何解码一个非常大的json数组,颤振只解码前20项?,flutter,http,dart,flutter-animation,dio,Flutter,Http,Dart,Flutter Animation,Dio,您好,我有一个api,它返回一个大列表,这个列表的最小长度可以是100或120个元素,而flift decode只有前20个元素是列表。 现在,在您看来,我加载了一个非常大的json数组元素,不关心api的速度,请求只需要30万秒,api是:。我使用http包加载数据,这就是我的代码 Future getEverythingFunc({@required String query}) async { http.Response response = await http.get(Uri

您好,我有一个api,它返回一个大列表,这个列表的最小长度可以是100或120个元素,而flift decode只有前20个元素是列表。 现在,在您看来,我加载了一个非常大的json数组元素,不关心api的速度,请求只需要30万秒,api是:。我使用http包加载数据,这就是我的代码

Future getEverythingFunc({@required String query}) async {
    http.Response response =  await http.get(Uri.parse(ApiReq.everyThingForSearchingUrl(query:query)));
    if (response.statusCode >= 200 && response.statusCode <= 300) {
      print(response.body);
      return everythingModel = everythingModelFromJson(response.body);
    } else if (response.statusCode >= 400 && response.statusCode <= 500) {
      throw "Err while getting data ${response.statusCode}";
    } else {
      throw 'Unknown Err ${response.statusCode}';
    }
  }
Future getEverythingFunc({@required String query})异步{
http.Response-Response=wait-http.get(Uri.parse(ApiReq.everythingforsearchingur(query:query));

如果(response.statusCode>=200&&response.statusCode=400&&response.statusCode我不知道你是怎么编码的,但是
jsonDecode
函数工作得很好。你读过NewsAPI中的文档了吗?如果省略
pageSize
参数,默认值是20个结果,免费订阅的最大值是100。我已经测试过了,我的代码:

// @dart=2.13
import 'dart:async';
import 'dart:io';

import 'package:wnetworking/wnetworking.dart';

typedef JMap = Map<String, dynamic>;

class NewsAPI {
  static const _base = 'https://newsapi.org/v2';
  static const _apiKey = '111111111111111111111111111111';
  
  // 'pageSize' ranges from 0 to 100 for free subscription, more size is paid
  // source: https://newsapi.org/docs/endpoints/everything
  static FutureOr<void> fetchNews({required keyword, int pageSize=20}) async {
    final url = '$_base/everything?q=$keyword&pageSize=$pageSize&sortBy=publishedAt&apiKey=$_apiKey';
    List? news;

    stdout.write('Fetching news... ');
    await HttpReqService.getJson<JMap>(url)
      .then((response) {
        if (response != null) {
          news = response['articles'] as List;
        }
      })
      .whenComplete(() {
        print('done!');
        print('\nNews fetched: ${news!.length}');
      });
  }
}

void main(List<String> args) async {
  await NewsAPI.fetchNews(keyword: 'anime', pageSize: 100);
  print('Job done.');
}
注意

  • wnetworking
    包尚未准备好发布,它包含与API等相关的操作。您可以使用典型的
    http.get
    替换
    HttpReqService.getJson
    ,但请记住返回值和异常

是否可以提供所有返回的JSON,以便我们可以尝试查看出了什么问题?我想您已经通过打印
响应.body
进行了检查,并验证了JSON是完全有效的,并且不包含任何字符集问题。是的,我打印了,并看到响应返回了完整的数据,但问题是在解析时引起的它只接受前20个元素或随机20个元素,并将它们放在我的模型列表中。好的,你测试过你将完整的JSON直接粘贴到dart代码中的位置吗?只是为了验证这个问题与其他问题无关?是的,当然!这是个问题,一切都很好,一切都很好,唯一奇怪的是这不是仅仅解析了模型列表中的20个元素,所以我问我自己这个问题可能与线程有关,或者这个问题可能是因为api许可证而发生的吗?但是api如果你检查了它,它说开发者不需要支付任何费用,所以我认为这个问题可能是因为我在主线程中做了所有事情,所以我使用了计算方法,但同样的事情发生了n!。你可以在git上检查我的代码发送邮件给我,如果你想检查我的代码,也可以写在这里检查我的代码。我不是一个真正的颤振开发人员,但我可以正确地将你的代码移动到一些普通的Dart程序并测试JSON解析。你可以在我的Github配置文件上找到我的邮件(登录后):。我明天有点忙,所以我不能保证我会在周一之前看。:)非常感谢兄弟你解决了我的问题。我唯一错过的是阅读文档中的“页面大小”,谢谢你的时间
Fetching news... done!

News fetched: 100
Job done.