日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kotlin学习笔记——扩展函数(anko)和网络请求

發布時間:2024/4/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kotlin学习笔记——扩展函数(anko)和网络请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
anko是一個強大的庫,主要目的是替代以前xml的方式來使用代碼生成布局。除此之外,也包含了很多有幫助的函數和屬性。本章因為內容需要先介紹其中的擴展函數,其他的我們后面章節再來介紹。 anko的github地址https://github.com/Kotlin/anko

1、擴展函數

擴展函數是在一個類上增加一種新的行為,甚至我們沒有這個類代碼的權限。擴展函數的優勢是它表現的像屬于這個類一樣,不需要傳入這個類的對象,而且可以使用this關鍵字和調用所有public方法。 一個例子,我們定義一個toast函數如下: fun Context.toast(msg: CharSequence, length: Int = Toast.LENGTH.LONG){Toast.makeText(this, msg, length).show }
由于我們在Context上添加的這個擴展函數,那么他的子類都可以直接使用,比如在activity、fragment中,如 toast("test", 1000) toast("test") 在anko中已經包括了toast的擴展函數,與上面類似。anko提供了針對CharSequence和Resource的函數,還有兩個不同的toast和longToast方法,如: toast("test") longToast(R.string.test) 擴展函數也可以是一個屬性,例如(anko中也已經實現了): public var TextView.text: CharSequenceget() = getText()set(v) = setText(v) 擴展函數并不是真正的修改了一個類,而是以靜態導入的方式來實現的。擴展函數可以被聲明在任何文件中,因此最好將一系列有關的擴展函數定義在一個文件中。

2、請求

一、異步請求

kotlin提供一些擴展函數來使請求變得簡單,如: var text = URL(url).readText() 注意:readText不推薦結果很大的響應。 異步請求 在android中通常會使用AsyncTask,但使用時非常危險,因為運行到postExcute時,如果activity已經銷毀了就會崩潰。 anko提供了非常簡單的DSL來處理異步。doAsync函數(async函數已經棄用)用于在其他線程執行代碼;uiThread則在主線程執行代碼,如: doAsync{var text = URL(url).readText()Log.d(javaClass.simpleName, text)uiThread{toast("finish")} }
uiThread依賴于調用者,如果它被一個activity調用,那么當activity.isFinishing()返回true,uiTread就不會調用,這樣就防止了崩潰。 假如你想使用Future(java中關于線程的一個接口,用于獲取結果)來工作,doAsync會返回一個Future。而如果你需要一個返回結果的Future,可以使用doAsyncResult。

二、數據類

1、定義一個數據類很簡單,如: data class Product(val date: Date, var price: Float, var detail: String) 數據類提供一些函數equals()、copy()、hashCode() 2、復制數據類 如果使用不可修改對象,如果要修改某個屬性必須新建一個對象,使用copy可以簡化,如: var p1 = Product(Date(), 27.5f, "tiny robot") var p2 = p1.copy(price = 30f) 這樣我們拷貝了一個對象同時修改了屬性值 3、映射數據類 多聲明既映射對象的每一個屬性到一個變量中,如: var p1 = Product(Date(), 27.5f, "tiny robot") var (date, price, detail) = p1 上面這個多聲明會被編譯成: var date = p1.compenent1() var price = p1.compenent2() var detail = p1.compenent3() 多聲明可以簡化代碼,比如在迭代一個map時: for((key, value) in map){Log.d("map", "key: $key value: $value") }

三、json解析

json解析與java類似,定義好數據類,保證屬性名稱與json字段名稱一致即可(也可以用serialisedname) Gson().fromJson(jsonStr, Product::class.java)

?

總結

以上是生活随笔為你收集整理的kotlin学习笔记——扩展函数(anko)和网络请求的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。