• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 在Android上,怎样与Kotlin一起使用Retrofit(KAD21),kotlinretrofit

在Android上,怎样与Kotlin一起使用Retrofit(KAD21),kotlinretrofit

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了kotlin retrofit,android retrofit使用,kotlin android,android 新语言kotlin,kotlin开发android等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在Android上,怎样与Kotlin一起使用Retrofit(KAD21),kotlinretrofit


作者: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()。

 

在上面例子中,T是LastFmResponse,U是List。

 

 

结论

 

 

用这个例子,我想要向你再次展示任何你知道的,且喜欢的Java库都能够在Kotlin中使用,毫无问题。

 

这非但没有使事情变得更复杂,而是在大多数情况下,简化语言代码。

 

准备好学习如何建立你的第一个项目,就去阅读免费

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 在Android上,怎样与Kotlin一起使用Retrofit(KAD21),kotlinretrofit

相关文章

  • 2017-05-26node.js 通过ajax上传图片
  • 2017-05-26android 自学日记(一)
  • 2017-05-26App字体大小不随系统改变而改变,
  • 2017-05-26Android studio 插件安装 plugin
  • 2017-05-26BaseAdapter日常的封装,baseadapter封装
  • 2017-05-26Android--线程详解
  • 2017-05-26Android热补丁动态修复技术(三)—— 使用Javassist注入字节码,完成热补丁框架雏形(可使用)
  • 2017-05-227.1.3 Android HTTP请求方式:HttpURLConnection
  • 2017-05-26Android中资源文件的Shape使用总结
  • 2017-05-228.3.5 Paint API之—— Xfermode与PorterDuff详解(二)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android 仿摩拜单车共享单车进度条实现StepView,androidstepview
    • 分析google的multidex库,googlemultidex库
    • MirrorNetwork 基于jmdns和netty的android网络通信开源库,mirrornetworkjmdns
    • xshell可以ping通但是不能远程服务器,putty可以远程
    • Android学习——四种绑定监听事件,android监听
    • 安卓开发中内存问题分析(一)工具篇
    • 安卓中Paint类和Canvas类的方法汇总,安卓中canvas
    • Handler消息传递机制(一)
    • 三种POST和GET的提交方式,postget提交
    • listview的ViewHolder优化,listviewviewholder

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有