首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >调用多个app会降低应用程序的加载速度吗?

调用多个app会降低应用程序的加载速度吗?
EN

Stack Overflow用户
提问于 2019-10-18 09:47:24
回答 1查看 400关注 0票数 0

因此,我使用互联网上可用的App制作了一个新闻应用程序。所以我不得不为每个不同的类别使用不同的API。有超过9个类别,所以这使得我的应用程序加载非常慢。那么,这个问题的解决方案是什么?我怎么可能只在初始状态调用两个app,而在应用程序加载一段时间后调用其余的app。请参见以下代码:

代码语言:javascript
运行
AI代码解释
复制
class NewsCard extends StatefulWidget {
  @override
  _NewsCardState createState() => _NewsCardState();
}

class _NewsCardState extends State<NewsCard>
    with SingleTickerProviderStateMixin {

  TabController tabController;
  static DateTime now = DateTime.now();
  String formattedDate;
  List newsData;
  List topNews1;
  List businessNews1;
  List worldNews1;
  List sportsNews1;
  List entertainmentNews1;
  List educationNews1;
  List tvnews1;
  List electionNews1;
  List lifeNews1;
  bool isLoading = true;
  final String toi= "https://timesofindia.indiatimes.com/";
  final String topNews =
      "API url";
  final String sportsNews =
      "API url";

  final String businessNews =
      "API url";

  final String worldNews =
      "API url ";
  final String entertainmentNews =
      "API url ";
  final String educationNews =
      "API url";
  final String tvNews =
      "API url ";
  final String electionNews =
      "API url";
  final String lifeNews =
      "API url";

  final String url =
      "https://newsapi.org/v2/top-headlines?sources=google-news-in&apiKey=";

  Future getData() async {
    var response = await http.get(
      Uri.encodeFull(url),
      headers: {
        HttpHeaders.authorizationHeader: ""
      },
    );
    var response1 = await http.get(
      Uri.encodeFull(topNews),
    );
    var response2 = await http.get(
      Uri.encodeFull(businessNews),
    );
    var response3 = await http.get(
      Uri.encodeFull(worldNews),
    );
    var response4 = await http.get(
      Uri.encodeFull(sportsNews),
    );
    var response5 = await http.get(
      Uri.encodeFull(entertainmentNews),
    );
    var response6 = await http.get(
      Uri.encodeFull(tvNews),
    );
    var response7 = await http.get(
      Uri.encodeFull(lifeNews),
    );
    var response8 = await http.get(
      Uri.encodeFull(electionNews),
    );
    var response9 = await http.get(
      Uri.encodeFull(educationNews),
    );
    List data = jsonDecode(response.body)['articles'];
    List topNewsData = jsonDecode(response1.body)['stories'];
    List businessNewsData = jsonDecode(response2.body)['items'][0]['stories'];
    List worldNewsData = jsonDecode(response3.body)['items'][0]['stories'];
    List sportsNewsData = jsonDecode(response4.body)['items'][0]['stories'];
    List entertainmentNewsData = jsonDecode(response5.body)['items'][0]['stories'];
    List tvNewsData = jsonDecode(response6.body)['items'][0]['stories'];
    List lifeNewsData = jsonDecode(response7.body)['items'][0]['stories'];
    List electionsNewsData = jsonDecode(response8.body)['items'][0]['stories'];
    List educationNewsData = jsonDecode(response9.body)['items'][0]['stories'];
    setState(() {
      newsData = data;
      topNews1 = topNewsData;
      businessNews1 = businessNewsData;
      worldNews1 = worldNewsData;
      sportsNews1 = sportsNewsData;
      entertainmentNews1 = entertainmentNewsData;
      tvnews1 = tvNewsData;
      lifeNews1=lifeNewsData;
      electionNews1 = electionsNewsData;
      educationNews1  = educationNewsData;
      isLoading = false; //this is for the initial loading, this is taking too much of time.
    });
  }

  @override
  void initState() {
    super.initState();
    this.getData();
    tabController = TabController(vsync: this, length: 9);
  }

脚手架内

代码语言:javascript
运行
AI代码解释
复制
isLoading
                ?Column(....):Column(.....)

请记住,我是一个初学者,所以如果我的方法是错误的,那么请善意地要求我做完美的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-18 11:13:35

由于不同的api调用之间没有依赖关系(api调用1不需要等待api调用0完成),因此最好将它们全部启动并等待结束时的结果。所以不要对每个应用程序接口调用都使用await。取而代之的是使用Future.wait来等待所有的期货。类似于:

代码语言:javascript
运行
AI代码解释
复制
  Future getData() async {
    List<Future> responseFutures = [
      http.get(
        Uri.encodeFull(url),
        headers: {HttpHeaders.authorizationHeader: ""},
      ),
      http.get(
        Uri.encodeFull(topNews),
      ),
      http.get(
        Uri.encodeFull(businessNews),
      ),
      http.get(
        Uri.encodeFull(worldNews),
      ),
      http.get(
        Uri.encodeFull(sportsNews),
      ),
      http.get(
        Uri.encodeFull(entertainmentNews),
      ),
      http.get(
        Uri.encodeFull(tvNews),
      ),
      http.get(
        Uri.encodeFull(lifeNews),
      ),
      http.get(
        Uri.encodeFull(electionNews),
      ),
      http.get(
        Uri.encodeFull(educationNews),
      ),
    ];
    List responses = await Future.wait(responseFutures);

    List data = jsonDecode(responses[0].body)['articles'];
    List topNewsData = jsonDecode(responses[1].body)['stories'];
    List businessNewsData = jsonDecode(responses[2].body)['items'][0]['stories'];
    List worldNewsData = jsonDecode(responses[3].body)['items'][0]['stories'];
    List sportsNewsData = jsonDecode(responses[4].body)['items'][0]['stories'];
    List entertainmentNewsData = jsonDecode(responses[5].body)['items'][0]['stories'];
    List tvNewsData = jsonDecode(responses[6].body)['items'][0]['stories'];
    List lifeNewsData = jsonDecode(responses[7].body)['items'][0]['stories'];
    List electionsNewsData = jsonDecode(responses[8].body)['items'][0]['stories'];
    List educationNewsData = jsonDecode(responses[9].body)['items'][0]['stories'];
    setState(() {
      newsData = data;
      topNews1 = topNewsData;
      businessNews1 = businessNewsData;
      worldNews1 = worldNewsData;
      sportsNews1 = sportsNewsData;
      entertainmentNews1 = entertainmentNewsData;
      tvnews1 = tvNewsData;
      lifeNews1 = lifeNewsData;
      electionNews1 = electionsNewsData;
      educationNews1 = educationNewsData;
      isLoading = false; //this is for the initial loading, this is taking too much of time.
    });
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58448234

复制
相关文章
Android Volley完全解析(四),带你从源码的角度理解Volley
经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是对于Volley的工作原理,恐怕有很多朋友还不是很清楚。因此,本篇文章中我们就来一起阅读一下Volley的源码,将它的工作流程整体地
用户1158055
2018/01/05
1.2K0
Android Volley完全解析(四),带你从源码的角度理解Volley
volley7–NetworkDispatcher从网络中获取数据[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/108121.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/20
3.1K0
Android网络编程(四)从源码解析Volley
相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley用法全解析
用户1269200
2018/02/01
6700
Android网络编程(四)从源码解析Volley
Android从ftp服务器获取文件
window搭建ftp服务器的步骤在这里,亲测可行: http://blog.sina.com.cn/s/blog_3f7e47f20100haur.html 主要留意一下绑定的ip地址,以后要用到
提莫队长
2019/02/21
1.6K0
Android知识浅积累——Volley篇#Android网络框架Volley
http://blog.csdn.net/jdsjlzx/article/details/40738181
代码咖啡
2018/08/28
4860
Android知识浅积累——Volley篇#Android网络框架Volley
Android Volley完全解析(一),初识Volley的基本用法
本文主要介绍了Volley网络库的基本用法,包括StringRequest、JsonObjectRequest和JsonArrayRequest的使用,以及如何使用Volley发送JSON格式的数据。通过实例,详细讲解了Volley网络库的用法,为Android网络通信提供了另一种实现方案。
用户1158055
2018/01/05
1.9K0
Android Volley完全解析(一),初识Volley的基本用法
Android Volley核心源码解析
闲聊Volley Volley下载 Volley.jar及源码下载:http://download.csdn.net/detail/qq_17250009/9458711 Volley gitHu
非著名程序员
2018/02/02
9200
Android Volley核心源码解析
Android Volley完全解析(二),使用Volley加载网络图片
用户1158055
2018/01/05
1.3K0
Android Volley完全解析(二),使用Volley加载网络图片
Volley请求
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。 不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是乎,一些Android网络通
xiangzhihong
2018/01/30
1.8K0
Android框架之Volley与Glide
PS:在看到这个题目的同时,你们估计会想,Volley与Glide怎么拿来一块说呢,他们虽然不是一个框架,但有着相同功能,那就是图片处理方面。首先我们先来看一下什么volley,又什么是glide。 Volley是Google官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持OkHttp,Volley里面也封装了ImageLoader,自身作为图片加载框架,不过这块功能没有一些专门的图片加载框架强大,对于简单的需求可以使用,对于稍复杂点的需求还是需要用到专门的图片加载框架。Volley也有缺陷,比
cMusketeer
2018/06/14
1.3K0
java程序获取服务器响应报文
如果我们想得到当前主机与远程主机是否连接,或者我们想做一个小型浏览器,我们需要使用socket写一个请求报文。废话少说,上代码。 public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Socket socket = null; OutputStream outputStream = null; In
forrestlin
2018/05/23
1.7K0
volley请求原理
Volley 实现原理解析 本文为 Android 开源项目实现原理解析 中 Volley 部分 项目地址:Volley,分析的版本:35ce778,Demo 地址:Volley Demo 分析者:grumoon,校对者:huxian99,校对状态:完成 1. 功能介绍 1.1. Volley Volley 是 Google 推出的 Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。 名字由来:a burst or emission o
xiangzhihong
2018/01/30
2.2K0
Android训练课程(Android Training) - 使用Volley传输网络数据(Transmitting Network Data Using Volley)
Volley 是一个 HTTP 库,它使得在Android应用程序中操作网络更容易,是重要的,更多快速的。Volley 属于“开放源代码项目”。.
张云飞Vir
2020/03/16
2.2K0
2019最新Android面试题「建议收藏」
金三银四到来了,找工作的好时候到了,小伙伴们是不是都在忙着找工作呢,小弟前一阵也是忙着在找工作,面试了好多公司,所幸的是进到了自己心仪的公司,也是很幸运的。下面我将自己亲身实战的面试题及收到的面试题总结并分享答案出来。欢迎各位大哥指导、指点。
全栈程序员站长
2022/08/26
8880
2019最新Android面试题「建议收藏」
笔记12 | 复习Volley(一)基本概念和用法
地址 CSDN 地址:http://blog.csdn.net/xiangyong_1521/article/details/50477748郭霖:http://blog.csdn.net/guolinblog/article/details/17482095 Android开发团队为了将HTTP的通信操作进行简单化,在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。 优点:Volley可是说是把AsyncHttpClient和Universal-Image-Loader的
项勇
2018/06/19
8660
2019最新Android面试题
金三银四到来了,找工作的好时候到了,小伙伴们是不是都在忙着找工作呢,小弟前一阵也是忙着在找工作,面试了好多公司,所幸的是进到了自己心仪的公司,也是很幸运的。下面我将自己亲身实战的面试题及收到的面试题总结并分享答案出来。欢迎各位大哥指导、指点。
终端研发部
2019/06/19
1K0
2019最新Android面试题
如何登录云服务器地址?云服务器地址从哪里获取?
云服务器在现代网络中的使用已经非常普遍,很多中小企业都利用云服务器来实现很多网络基础功能,但对于一些刚刚接触云服务器的用户而言,还是会存在很多问题。那么如何登录云服务器地址?云服务器地址从哪里获取呢?
用户8715145
2021/08/27
44.2K0
点击加载更多

相似问题

如何使用volley从服务器获取响应?

12

如何在android中使用volley从服务器获取json响应?

21

无法从MySQL Android Volley响应中获取数据

16

如何从volley响应中获取cookies

18

Android Volley无法获取数据作为响应

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档