一、执行一个请求。通过以上的内容学习,现在是时候去请求一些显示在RecyclerView上的真正的数据。我们将会使用OpenWeatherMap API来获取数据,还有一些普通类来现实这个请求。多亏Kotlin非常强大的互操作性,比如可以用Retrofit来执行服务器请求。点击测试

当只是执行一个简单的API请求,我们可以不使用任何第三方库来简单地实现。而且,Kotlin提供了一些扩展函数来让请求变得更简单。首先,我们要创建一个新的Request类:我们的请求很简单,就是接收一个url,然后读取结果并在logcat上打印json。实现非常简单,因为我们使用readText,这是Kotlin标准库中的扩展函数。这个方法不推荐用于返回结果很大的响应,但是在这个例子中使用没有一点问题。

如果你用这些代码去比较Java,你会发现我们仅使用标准库就节省了大量的代码。比如HttpURLConnection、BufferedReader和需要达到相同效果所必要的迭代结果,管理连接状态、reader等部分的代码。很明显,这些就是场景背后函数所作的事情,但是我们却不用关心。

二、在主线程以外执行请求。我们都知道HTTP请求不被允许在主线程中执行,否则它会抛出异常。这是因为阻塞住UI线程是一个非常差的体验。Android中通用的做法是使用异步任务AsyncTask,但这个也有不少缺陷。如果你使用不小心,AsyncTasks会非常危险,因为当运行到postExecute时,如果Activity已经被销毁了,这里就会崩溃。Anko提供了非常简单的DSL来处理异步任务,它满足大部分的需求。它提供了一个基本的async函数用于在其它线程执行代码,也可以选择通过调用uiThread的方式回到主线程。在子线程中执行请求如下这么简单:

UIThread有一个很不错的一点就是可以依赖于调用者。如果它是被一个Activity调用的,那么如果activity.isFinishing()返回true,则uiThread不会执行,这样就不会在Activity销毁的时候遇到崩溃的情况了。

点击获取测试key和secret

测试结果展示:

如何从API中获取数据(一)相关推荐

  1. 从API中获取数据(七)

    一.执行一个请求.通过以上的内容学习,现在是时候去请求一些显示在RecyclerView上的真正的数据.我们将会使用OpenWeatherMap API来获取数据,还有一些普通类来现实这个请求.多亏K ...

  2. requests从api中获取数据并存放到mysql中

    python的requests库是一个非常强大的库,requests的安装方法十分简单,用: pip install requests 即可安装requests,安装成功后: import reque ...

  3. 【TWS API使用教程6】---如何使用TWS API在盈透证券中获取数据?

    在关于TWS API的翻译文档中,有两篇讲TWS中的数据的文章,这篇主要讲解如何使用TWS API获取具体的数据. 11.TWS和IB中的streaming市场数据 13.TWS API和IB中的历史 ...

  4. 在React中获取数据

    React初学者经常从不需要获取数据的应用开始.他们经常面临一个计数器,任务列表获取井字棋游戏应用.这是很好的,因为在开始学习React的时候,数据获取在你的应用中添加了另一层复杂度. 然而,有些时候 ...

  5. OC从plist文件中获取数据

    怎样从plist文件中读取数据,这个和反归档相似,但是也存在着区别,比如说不用解码,当然一般我们获取的数据往往是对一个对象的描述,而且数据的个数也不是一个,因此我们有必要来说一下怎样完整的从plist ...

  6. C#从剪贴板中获取数据

    今天我们同学问我如何利用C#把剪贴板里的图片存出来,我看了看,非常简单 IDataObject data = Clipboard.GetDataObject();//从剪贴板中获取数据 if(data ...

  7. c从sqlite3数据库中获取数据,并对数据进行拼接

    c从sqlite3数据库中获取数据,并对数据进行拼接 函数功能 对数据库的操作 创建数据库: 创建USER表: 创建表内数据: 查看表内数据: 查看表结构: 函数实现 函数编译: 函数结果: 函数功能 ...

  8. ​​​​​​​​​​​​​​使用dom方式遍历文档||获取元素||从元素中获取数据

    使用dom方式遍历文档 获取元素 根据id查询元素getElementById 根据标签获取元素getElementsByTag 根据class获取元素getElementsByClass 根据属性获 ...

  9. getdata提取曲线数据_Origin如何从图表中获取数据

    点击上方"蓝字",一起愉快的玩耍吧!Origin如何从图表中获取数据01图片分析软件安装 一.GetData Graph Digitizer安装 使用范围: 1.需要引用别人文章中 ...

最新文章

  1. 最常见NLP任务练手项目汇总
  2. Spring注入service为null另类解决办法 工具类 一般类 静态 非controller
  3. linux意外重启分析,Linux关机重启流程分析
  4. 解决toad中number类型小数位数过长按科学计数法显示的问题
  5. [USACO4.2]完美的牛栏The Perfect Stall
  6. 菜鸟学Linux 第034篇笔记 vmlinuz, initrd, modules, script
  7. 【实习生笔试面试】腾讯2013实习生电话面试总结
  8. java 基于类路径搜索_一种基于ClassLoader的自定义类查找方法与流程
  9. c++ 结构体地址 转换成ulong_Nicole_coder
  10. 做成熟的人,做高效能的人
  11. 开机或者安装系统时提示tsc: Fast TSC calibration failed解决方法
  12. 盈不足术与老鼠打洞问题的近似解
  13. 《信号与系统》解读 第1章 信号与系统概述-1:信号与系统的描述和分析方法
  14. 揭秘抖音快手刷赞刷评论骗局,揭秘抖音刷赞兼职套路
  15. 【高仿微信系列】02、消息列表ListView滑动删除
  16. flash崩溃未保存!
  17. flappy bird游戏
  18. 软件测试人员能力矩阵
  19. campaign 缩写_Campaign Monitor的画布:简化电子邮件设计
  20. 计算机每次网络重插才能启动,为何电脑开机后再插网线才能用_每次开机都要重插网线的解决方法...

热门文章

  1. 三星530换固态硬盘_三星 870QVO 首测:探寻全球容量最大消费级固态硬盘的秘密...
  2. SDN 与 Mininet 概述
  3. 删除已被禁用的启动项
  4. base.dll丢失的解决方法_base.dll文件丢失修复教程
  5. 想要提升用户转化率?10种数据分析方法带你飞!
  6. 极光可信数据云,迈向共享、开放的开发者生态
  7. 图解连续学习中的蓄水池抽样算法(The Illustrated Reservoir sampling)
  8. B2C平台如何实现商户自动分账?
  9. Informatica学习笔记 .
  10. 对塑料瓶无知真是害死人 从塑料瓶底数字看其毒性[转]