1. 程式人生 > >Kotlin開發Android筆記7:Anko獲取網路資料

Kotlin開發Android筆記7:Anko獲取網路資料

—執行一個請求——-

 現在通過請求來獲取顯示在RecyclerView上的資料。我們將會使用OpenWeatherMap API來獲取資料,還有一些普通類來現實這個請求。
 Kotlin具有非常強大的互操作性,你可以使用任何你想使用的庫,比如用Retrofit來執行伺服器請求。
 當只是執行一個簡單的API請求,我們可以不使用任何第三方庫來簡單地實現。而且,Kotlin提供了一些擴充套件函式來讓請求變得更簡單。
 首先,我們要建立一個新的Request類:
public class Request(val url: String) {
    public fun run() {
    //url是我們傳入的請求地址,通過readText()方法就可以直接返回資料
val forecastJsonStr = URL(url).readText() //列印返回的json格式資料 Log.d(javaClass.simpleName, forecastJsonStr) } }
readText,這是Kotlin標準庫中的擴充套件函式。該方法不推薦結果很大的響應,但是在這個例子中已經足夠好了。

和Java相比,你會發現我們僅使用標準庫就節省了大量的程式碼。
比如HttpURLConnection、BufferedReader和需要的迭代結果,管理連線狀態、reader等部分的程式碼。
很明顯,這些就是場景背後函式所作的事情,但是我們卻不用關心。
當然前提是我們需要在AndroidManifest.xml中新增:
//新增網路訪問許可權
<uses-permission android:name="android.permission.INTERNET" />

–在主執行緒以外執行請求——–

 我們知道,在Android開發中HTTP請求不被允許在UI執行緒(主執行緒)中執行。這是因為阻塞住UI執行緒是一個非常差的體驗。
 Android中通用的做法是使用AsyncTask,但是使用它們無任何副作用地實現功能也是非常困難的。
 如果你使用不小心,AsyncTasks會非常危險,因為當執行到postExecute時,如果Activity已經被銷燬了,這裡就會崩潰。

 Anko提供了非常簡單的DSL(領域特定語言(domain-specific languages,簡稱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中把它畫出來。

學習資料來源《Kotlin for Android Developers》中文翻譯

相關推薦

Kotlin開發Android筆記7Anko獲取網路資料

—執行一個請求——- 現在通過請求來獲取顯示在RecyclerView上的資料。我們將會使用OpenWeatherMap API來獲取資料,還有一些普通類來現實這個請求。 Kotlin具有非常強大

Kotlin開發Android筆記13Android資料庫(SQLite)操作

SQLite是一個嵌入app的輕量級資料庫,Android使用SQLite作為它的資料庫管理系統。 在不使用第三方資料操作框架如GreenDao等的情況下,我們操作Android的操作資料庫 的API在Android中是非常原生的。需要編寫很多諸如增刪除改查

Android之ListView分頁獲取網路資料(伺服器端)(一)

資料庫分頁: mysql:select pname from product limit 0,2;第一個引數是指要開始的地方,第二個引數是指每頁顯示多少條資料;注意:第一頁用0表示。 oracle:rownumber SqlServer:top 一、伺服器端 ①新建包com

Python開發筆記獲取目錄下所有文件

lis rec sub else pytho 獲取 light urn -s 獲取文件 import os def sub_dirs(rdir): li = os.listdir(rdir) return li def main(r

Xamarin開發Android筆記使用ZXing進行連續掃描

在專案開發中需要使用到條碼掃描,因為以前就測試過ZXing,感覺識別速度和功能都不錯,所以直接引用。不過在實際開發的過程中,卻遇到連續掃描的問題,每次掃描識別完成之後,掃描窗體自動關閉了。 在Xamarin論壇中查詢解決方案,只是找到的iOS版本的解決方案。參考iOS的解決方案,其實就是在掃描完成之後重新開

Android直播開發之旅(7)Android視訊直播核心技術(架構)詳解

(轉載請宣告出處:http://blog.csdn.net/andrexpert/article/details/76919535) 一、直播架構解析      目前主流的直播架構中主要有兩種方案,即流媒體轉發、P2P。流媒體轉發,是一種在視訊直播中以流的方式將連續的音、

Kotlin/DSL(Anko),原汁原味Kotlin開發Android---Activity Fragment與AnkoUI分離,強大的複用,更加便捷的開發

/寫在前面翻開自己的CSDN,已經很久很久沒有活動了,最近的關於PDF簽章的部落格還是16年寫的。將近年關,工作內容階段性告一段落,終於有時間寫一下自己的東西。廢話少說,說說Kotlin。kotlin開發者給kotlin的定位---不是用來取代任何一種語言,而是 讓開發者有更

sqlite學習筆記7C語言中使用sqlite之打開數據庫

實例 clas details code 返回 pri san filename stdlib.h 數據庫的基本內容前面都已經說得差點兒相同了。接下看看如何在C語言中使用sqlite。 一 接口 sqlite3_open(const char *filename, s

【Head First Servlets and JSP】筆記7如何創建一個全局的dog?

函數 response servlet對象 用戶 技術 而是 ... first int 重定向與請求分派 “局部”參數——ServletConfig——servlet初始化參數 “全局

Python開發筆記進程

感覺 順序 至少 操作系統 打字 作業 都在 系統 簡單 序言 進程與線程概述:   很多同學都聽說過,現代操作系統比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任務”的操作系統。   什麽叫“多任務”呢?簡單地說,就是操作系統可以同時運行多個任

Python開發筆記git&github 快速入門

精神 源代碼 公開 平臺 per 其中 http cvs tro github入門 簡介:   很多人都知道,Linus在1991年創建了開源的Linux,從此,Linux系統不斷發展,已經成為最大的服務器系統軟件了。   Linus雖然創建了Linux,但Linux的壯大

Python開發筆記單線程下執行多個定時器

自動 代碼 python 線程 timer ont -s 大量 過多 單線程多定時器   前言:公司業務需求,實例當中大量需要啟動定時器的操作;大家都知道python中的定時器用的是threading.Timer,每當啟動一個定時器時,程序內部起了一個線程,定時器觸發執行結

《Flask web開發筆記2模板---繼承、bootstrap

only world use 可能 clas 似的 () 目前 div 前言:今天重新梳理了一下前端方面的知識,發現學習東西還是要用,不然忘得快,廢話不多說,開始!! 一.模板繼承 1.概念: 書上說,模板繼承,類似Python上的繼承; 其實個人覺得和所有繼承

python筆記7優雅的python

fault ssa 獲得 數據結構 位置 item 插入 app pan 7. 如何讓python代碼更 Pythonic : 1、變量交換: a, b = b, a 2、帶有索引位置的集合遍歷: colors = [‘red‘, ‘green‘, ‘blue‘

hibernate框架學習筆記7HQL查詢、Criteria查詢

import res ber return org close 返回 closed 所有 HQL查詢:hibernate獨有的查詢語言 適用於不復雜的多表查詢 示例: 實體類: package domain; public class Customer {

struts2框架學習筆記7struts2標簽

put 取值 div private sub pan 不常用 筆記 textarea 三大標簽: 1.JSP:腳本,為了替代servlet,已過時 2.JSTL:標準標簽庫(core、format、sql、xml),還未淘汰的只有core庫 3.Struts2標簽庫:由S

Android筆記02Intent機制詳解

tar 中一 定義 tty 一段 AI new 例如 pac 一、什麽是Intent? Intent在Android中提供了Intent機制來協助應用間的交互與通訊,Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的

Kali學習筆記7SHODAN搜索引擎

isp Go 6.2 www. image try 域名 主機 httpd SHODAN搜索引擎不像百度谷歌等,它們爬取的是網頁,而SHODAN搜索的是設備。 物聯網使用過程中,通常容易出現安全問題,如果被黑客用SHODAN搜索到,後果不堪設想。 網站:https://

基於.NET的CAD二次開發學習筆記AutoCAD .NET中的物件

1、CAD物件 一個CAD檔案(DWG檔案)即對應一個數據庫,資料庫中的所有組成部分,看的見(包括點、多段線、文字、圓等)和看不見(圖層、線型、顏色等)的都是物件,資料庫本身也是一個物件。 直線、圓弧、文字和標註等圖形物件都是物件。 線型與標註樣式等樣式設定都是物件。 圖層

基於.NET的CAD二次開發學習筆記CAD開發入門

1、AutoCAD .NET API由不同的DLL檔案組成,它們提供用於訪問圖形檔案或AutoCAD應用程式的包含豐富的類、結構、方法和事件。每一個DLL檔案都定義不同的使用基於功能的庫組織元件的名稱空間。 下面是你將頻繁地要使用的AutoCAD .NET API 的三個主要的DLL檔案: