美文网首页
Kotlin之从API中获取数据

Kotlin之从API中获取数据

作者: 钦_79f7 | 来源:发表于2019-12-22 10:57 被阅读0次

执行一个请求

对于感受我们要实现的想法而言,我们目前的文本是很好开始,但是现在是时候去请求一些显示在RecyclerView上的真正的数据了。我们将会使用OpenWeatherMap API来获取数据,还有一些普通类来现实这个请求。多亏Kotlin非常强大的互操作性,你可以使用任何你想使用的库,比如用Retrofit来执行服务器请求。当只是执行一个简单的API请求,我们可以不使用任何第三方库来简单地实现。

而且,如你所见,Kotlin提供了一些扩展函数来让请求变得更简单。首先,我们要创建一个新的Request类:

public class Request(val url: String) {
    public fun run() {
        val forecastJsonStr = URL(url).readText()
        Log.d(javaClass.simpleName, forecastJsonStr)
    }
}

我们的请求很简单地接收一个url,然后读取结果并在logcat上打印json。实现非常简单,因为我们使用readText,这是Kotlin标准库中的扩展函数。这个方法不推荐结果很大的响应,但是在我们这个例子中已经足够好了。

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

为了可以执行请求,App必须要有Internet权限。所以需要在AndroidManifest.xml中添加::

<uses-permission android:name="android.permission.INTERNET" />

在主线程以外执行请求

如你所知,HTTP请求不被允许在主线程中执行,否则它会抛出异常。这是因为阻塞住UI线程是一个非常差的体验。Android中通用的做法是使用AsyncTask,但是这些类是非常丑陋的,并且使用它们无任何副作用地实现功能也是非常困难的。如果你使用不小心,AsyncTasks会非常危险,因为当运行到postExecute时,如果Activity已经被销毁了,这里就会崩溃。

Anko提供了非常简单的DSL来处理异步任务,它满足大部分的需求。它提供了一个基本的async函数用于在其它线程执行代码,也可以选择通过调用uiThread的方式回到主线程。在子线程中执行请求如下这么简单:

async() {
    Request(url).run()
    uiThread { longToast("Request performed") }
}

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

假如你想使用Future来工作,async返回一个Java Future。而且如果你需要一个返回结果的Future,你可以使用asyncResult

真的很简单,对吧?而且比AsyncTasks更加具有可读性。现在,我仅仅给请求发送了一个url,来测试我们是否可以正确接收内容,这样我们才能在Activity中把它画出来。我很快会讲到怎么去进行json解析和转换成app中的数据类,但是在我们继续之前,学习什么是数据类也是很重要的。

检查代码并审查url请求和包结构的代码。你可以运行app并且确保你可以在打印的json日志和请求完毕之后的toast。

相关文章

  • Kotlin之从API中获取数据

    执行一个请求 对于感受我们要实现的想法而言,我们目前的文本是很好开始,但是现在是时候去请求一些显示在Recycle...

  • Android Kotlin 从0到1 之从API中获取数据,发

    到这里我们可以尝试使用Kotlin 发起一次API 的请求获取数据。带你体验最简洁的数据请求,将数据解析,并展示!...

  • Ansible 开发API 之【使用api运行task,自定义主

    在做api开发的时候,我们获取主机清单的主机信息的方式,往往是从数据库中获取到的,而不是从文件中获取,下面的列子给...

  • HBase CURD之Get

    下面我们将介绍从客户端API中获取已存数据的方法。HTable类中提供了get()方法,同时还有与之对应的Get类...

  • Node零基础入门到服务端程序 -- 第三章

    第三章 从数据库中获取数据并返回给API接口 上面,我们已经通过路由成功将内容返回给了api接口,但是数据都是动...

  • Python 获取url分页数据

    通过实时访问API接口获取json数据落地至本地,分享一个小脚本。 API访问数据接口格式为:数据访问结构 从数据...

  • 网页采集工具选择分析-数据采集

    网络数据采集 是 指通过网络爬虫或网站公开 API 等方式从网站上获取数据信息。 该方法可以将非结构化数据从网页中...

  • Android Handler使用

    在Android开发的过程中,经常会有这样的场景:从网络获取数据然后更改某个控件的属性。例如,从网络API获取Js...

  • 本地存储

    API 保存数据到本地 从本地存储获取数据 本地存储中删除某个保存的数据 删除所有保存的数据 监听本地存储的变化S...

  • 通过网络爬虫采集大数据

    网络数据采集是指通过网络爬虫或网站公开 API 等方式从网站上获取数据信息。该方法可以将非结构化数据从网页中抽取出...

网友评论

      本文标题:Kotlin之从API中获取数据

      本文链接:https://www.haomeiwen.com/subject/dbuinctx.html