为了账号安全,请及时绑定邮箱和手机立即绑定

在 Kotlin 的 Android 项目中使用 Retrofit+RxJava

标签:
Android

众所周知,在今年的 Google I/O 上宣布了将 Kotlin 作为 Android 开发的官方支持语言。
今天这里就介绍下如何在用 Kotlin 的 Android 项目中使用 Retrofit(Retrofit 可以说是最受欢迎的网络第三方库,即使是 Google 也在他们的代码示例中用到了它)。

在今天的这篇文章中,我们将讨论如果通过 Retrofit + RxJava + Kotlin 在项目中使用 REST API,也就是大家几乎每天都会做到的事 - API 调用。

0. 准备工作

开发环境:Android Studio 3.0

了解基本的 Kotlin 相关知识。

1. 添加依赖

在 app-module 的 build.gradle

文件中添加依赖:

dependencies { 
    // retrofit 
    compile "com.squareup.retrofit2:retrofit:2.3.0" 
    compile "com.squareup.retrofit2:adapter-rxjava2:2.3.0" 
    compile "com.squareup.retrofit2:converter-gson:2.3.0" 

    // rxandroid 
    compile "io.reactivex.rxjava2:rxandroid:2.0.1"}

2. 创建数据类

在这里我们以 Github API 为例先创建 POJO,用 Kotlin 来创建数据类非常的简单:

5b9260a50001654406000216.jpg

3. 创建 API Service Interface

这一步里我们创建 API 接口用于发起请求并获取响应。

interface GithubApiService {

    @GET("search/users")
    fun search(@Query("q") query: String,
               @Query("page") page: Int,
               @Query("per_page") perPage: Int): Observable<Result>

    /**     * Companion object to create the GithubApiService     */
    companion object Factory {
        fun create(): GithubApiService {
            val retrofit = Retrofit.Builder()
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .baseUrl("https://api.github.com/")
                    .build()

            return retrofit.create(GithubApiService::class.java);
        }
    }}

然后我们可以这样来使用:

val apiService = GithubApiService.create()apiService.search(/* search params go in here */)

注意其中我们用到了 companion object 来修饰 Factory,那么这个 companion object 是干什么用的呢?
首先,在 Kotlin 中使用单例模式非常的简单,也就是用 object:

object SearchRepositoryProvider { 
    fun provideSearchRepository(): SearchRepository { 
        return SearchRepository() 
    }}

object 关键字声明的对象将在第一次被访问时被初始化,也就是懒汉式单例。

而 companion 这个名称可就值得一聊了,最早 companion object 被叫过 class object 和 default object。因为 Java 类中的 static 属性和方法,按逻辑上严格说来其实不是类的一部分。因此,Kotlin 团队就思考怎么来更好的说明这种关系,经过详细的考虑之后选定了 companion。

感兴趣的同学可以看看官方 blog:Upcoming Change: “Class Objects” Rethough

因此,Java 中的 static 属性、方法,在 Kotlin 中可以用 companion object 来实现。

4. 创建 Repository

为了保证尽可能的抽象,我们创建一个 repository 来调用上面的 GithubApiService。在我们的这个 demo 中,我们通过 Github API 来查找位于 Lagos 的 Java 程序员:
location:Lagos+language:Java

代码看起来像这样:

class SearchRepository(val apiService: GithubApiService) {
    fun searchUsers(location: String, language: String): Observable<Result> {
        return apiService.search(query = "location:$location+language:$language")
    }}

5. 用 RxJava 进行请求并响应 API 回调

到这里准备工作就差不多了,就可以用 RxJava 来请求数据并响应数据了:

val repository = SearchRepositoryProvider.provideSearchRepository()repository.searchUsers("Lagos", "Java")
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeOn(Schedulers.io())
        .subscribe ({
            result ->
            Log.d("Result", "There are ${result.items.size} Java developers in Lagos")
        }, { error ->
            error.printStackTrace()
        })

这样,我们就完成了在用 Kotlin 的 Android 项目中使用 Restrofit 调用 REST API 的工作。

原文链接:http://www.apkbus.com/blog-822719-72606.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消