在Android上,怎樣與Kotlin一起使用Retrofit(KAD21)

来源:http://www.cnblogs.com/figozhg/archive/2017/04/22/6749559.html
-Advertisement-
Play Games

原作者再舉一例子,說明在Kotlin中怎使用Java使用過的相同庫:Retrofit。 ...


作者:Antonio Leiva

時間:Apr 18, 2017

原文鏈接:https://antonioleiva.com/retrofit-android-kotlin/

 

 

這是又一個例子,關於怎樣在Kotlin中使用Java使用過的相同庫。

 

 

Retrofit是一個庫,它極大地簡化了請求API,在這個例子中我計劃教你怎樣將其與一些LastFM API請求集成。你能夠讀到運行在Bandhook Kotlin創庫全部代碼。

 

 

Kotlin中的Retrofit 2

 

Kotlin代碼是非常類似我們在Java中用的。我們將看到更多的細節有哪些不同,而且,你會發現這一切都是很簡單和直觀的。

 

你還會看到我們也將創建一些非常實用的擴展函數。

 

 

構建build.gradle

 

我在這裡不會解釋太多,而你需要將下麵指令加入到build.gradle中:

1 compile "com.squareup.okhttp3:okhttp:$okhttpVersion"
2 compile "com.squareup.okhttp3:logging-interceptor:$okhttpVersion"
3 
4 compile ("com.squareup.retrofit2:retrofit:$retrofitVersion"){
5     // exclude Retrofit’s OkHttp peer-dependency module and define your own module import
6     exclude module: 'okhttp'
7 }

 

第一個依賴關係包括OkHttp最後的版本和日誌記錄攔截器,它能夠用於調試。

 

接著加Retrofit(不包括OkHttp,這樣我們控制我們實用的版本),Gson轉換器轉換請求給類。

 

創建通訊介面

 

 

這是Retrofit的中樞神經部分。這是你指定的請求結構,將需要匹配的API

 1 interface LastFmService {
 2 
 3     @GET("/2.0/?method=artist.search")
 4     fun searchArtist(@Query("artist") artist: String): Call
 5 
 6     @GET("/2.0/?method=artist.getinfo")
 7     fun requestArtistInfo(@Query("mbid") id: String, @Query("lang") language: String): Call
 8 
 9     @GET("/2.0/?method=artist.gettopalbums")
10     fun requestAlbums(@Query("mbid") id: String, @Query("artist") artist: String): Call;
11 
12     @GET("/2.0/?method=artist.getsimilar")
13     fun requestSimilar(@Query("mbid") id: String): Call
14 
15     @GET("/2.0/?method=album.getInfo")
16     fun requestAlbum(@Query("mbid") id: String): Call
17 }

 

它十分簡單。它用符號標識請求的類型,然後請求的參數作為參數的函數

 

 

Retrofit 2中,我們需要返回調用對象類型。

 

通訊服務的初始化

 

 

首先,你能夠按如下初始化OkHttp client端:

1 val client = OkHttpClient().newBuilder()
2     .cache(cache)
3     .addInterceptor(LastFmRequestInterceptor(apiKey, cacheDuration))
4     .addInterceptor(HttpLoggingInterceptor().apply {
5         level = if (BuildConfig.DEBUG) Level.BODY else Level.NONE
6     })
7     .build()
8 }

 

這裡我們看到了apple函數的使用,它將幫助我們以構建者風格初始化攔截器,不需要為類實現構建者的任何類型。

 

LastFmRequestInterceptor沒有什麼了不起,但是你能夠到GitHub上找到。伺服器端的創建於Java有些不同:

val retrofit = Retrofit.Builder()
        .baseUrl("http://ws.audioscrobbler.com")
        .client(client)
        .addConverterFactory(GsonConverterFactory.create())
        .build()

val lastFmService = retrofit.create(LastFmService::class.java)

 

建立你的第一個請求

 

 

由於需要調用Retrofit 2,它成為一點冗餘代碼:

1 val call = lastFmService.requestAlbums(mbid, name)
2 val result = call.execute().body()
3 val albums = AlbumMapper().transform(result.topAlbums.albums)

 

然而,幸虧有擴展函數,我們能夠在Call創建一個函數,提取值,就如同這樣:

1 val albums = lastFmService.requestAlbums(mbid, name).unwrapCall { 
2     AlbumMapper().transform(topAlbums.albums)
3 }

 

非常簡單,對面?

 

 

unwrapCall的格式是什麼?

1 inline fun <T, U> Call.unwrapCall(f: T.() -> U): U = execute().body().f()

 

它是擴展Call類的函數。它將執行請求,提取body,使其(它將是U類型)執行函數f()

 

在上面例子中,TLastFmResponseUList

 

 

結論

 

 

用這個例子,我想要向你再次展示任何你知道的,且喜歡的Java庫都能夠在Kotlin中使用,毫無問題

 

這非但沒有使事情變得更複雜,而是在大多數情況下,簡化語言代碼。

 

準備好學習如何建立你的第一個項目,就去閱讀免費,或者從頭學習如何創建一個完整的應用程式,就直接獲取這本書

 

 

 

 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JavaScript學習 【js中的數組】 1、數組的概念:是在記憶體中連續儲存對個有序元素的結構 元素的順序稱為下標,通過下標查找對象元素。 2、數組的聲明: ① 字面量聲明:var arr1 = []; js中,同一數組,可以儲存多種不同的數據類型: 例如: var arr1 = [1,"2",t ...
  • 日期經過json序列化之後,變成了'/Date(-62135596800000)/'字元串,在顯示數據時,我們需要解釋成正常的日期。 Insus.NET和js庫中,寫了一個jQuery擴展方法: $.extend({ JsonDateParse: function (value) { if (val ...
  • 接上一篇 "實現收發消息" 這一篇實現聊天視窗的功能 接收到消息或者發送消息,讓頁面顯示最新的消息內容 就像qq微信聊天那樣,接收到消息,或者你發送消息之後,讓最新的消息顯示在最下麵 實現思路就是, 監聽發送和接收消息事件, 一旦觸發了事件, 就讓聊天內容所在的元素的底端和其所在滾動區的可視區域的底 ...
  • <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin:0; } .tatle{width: 300px;height: 50px;backgroun ...
  • Gulp是基於流的前端自動化構建工具 使用步驟: 1.安裝node和npm 訪問國外伺服器網速不好時,安裝依賴模塊時會缺少文件。可以安裝國內的鏡像,之後使用cnpm命令代替npm命令。 npm install cnpm -g --registry=https://registry.npm.taoba ...
  • 今天學習了一個瀑布流載入效果,很多網站都有瀑布流效果,瀑布流就是很多產品顯示在網頁上,寬相同,高度不同,表現為多欄佈局,隨著頁面滾動條向下滾動,這種佈局還會不斷載入數據塊並附加至當前尾部。原理是:1.設定一行中的列數;2.取第一行中每一個div的高度並把每一個高度放進一個數組中;3.算出數組中最小高 ...
  • Vysor是一款非常強大而有好用的Android遠程顯示及控制軟體,有Chrome插件版、Windows客戶端版和Mac版,是Android開發和測試人員的必備神器。其中Windows客戶端版相對Chrome插件版更為穩定可靠。Chrome插件版經常會出現連接上以後黑屏、閃屏或彈出各種異常提示的問題 ...
  • 這一次是針對Android開發中的一個小問題,許可權獲取的問題。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...