博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android]使用Kotlin开发Android(二)
阅读量:6278 次
发布时间:2019-06-22

本文共 2687 字,大约阅读时间需要 8 分钟。

以下内容为原创,欢迎转载,转载请注明

来自天天博客:

[TOC]

使用Kotlin+OkHttp+RxJava进行网络请求

代码:

1. 需要

  • 对语法有基本的掌握
  • 对有基本的了解
  • 对 / 有基本的了解

2. Kotlin搭建环境

见之前的文章:

3. Gradle添加相关依赖包:

compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"compile 'com.squareup.okhttp:okhttp:2.4.0'compile 'io.reactivex:rxjava:1.0.12'compile 'io.reactivex:rxandroid:0.24.0'

4. 请求

一般的写法如下:

Observable.defer({ ->                Observable.just(OkHttpClient().newCall(                        Request.Builder()                                .url("https://github.com/wangjiegulu")                                .get()                                .build()                ).execute())            }).subscribeOn(Schedulers.newThread())                    .map({r -> r.body().string()})            .observeOn(AndroidSchedulers.mainThread())            .subscribe({ result -> Log.d(TAG, "request result: $result"); resultTv.setText("Http request succeed, see log") }, {throwable -> Log.e(TAG, "", throwable)});

5. 使用Kotlin语法糖进行简化

1) 在String类中扩展http请求方法

我们希望在url(String)中增加一个方法,直接调用后构建一个http请求:

fun String.request(): Request.Builder = Request.Builder().url(this);

如上代码,在String类中定义了一个request()方法,返回一个OkHttp的Request.Builder对象,并设置url为当前的String对象,即当前的url。

2) 在Request.Builder类中扩展执行http请求方法

调用String方法的request()方法之后,获得了一个构建的Request.Builder对象,然后希望通过这个对象调用某个方法来执行http请求,于是继续扩展:

fun Request.Builder.rxExecute(): Observable
= Observable.defer({ Observable.just(OkHttpClient().newCall(this.build()).execute()) }).subscribeOn(Schedulers.newThread());

我们在Request.Builder类中定义了一个rxExecute()方法,这个方法中,会通过RxJava构建一个Obserable对象,Obserable对象中排出给观察者的数据就是http执行完毕后的结果Response。并且指定了执行http请求所在的线程。

3) 优化后的调用方式

"https://github.com/wangjiegulu".request().get().rxExecute()                    .map({ r -> r.body().string() })                    .observeOnMain()                    .subscribeSafeNext { result -> Log.d(TAG, "request result: $result"); resultTv.setText("Http request succeed, see log") }

如上:通过url构建Request.Builder,然后通过RequestBuilder构建一个Obserable,然后订阅获得排出的请求结果。

为了方便调用,又在Obserable中扩展了几个方法:

fun 
Observable
.observeOnMain(): Observable
= this.observeOn(AndroidSchedulers.mainThread())fun
Observable
.subscribeSafeNext(onNext: (T) -> Unit): Subscription = this.subscribe(onNext, { t -> Log.e(TAG, "", t) }, {});fun
Observable
.subscribeSafeCompleted(onCompleted: () -> Unit): Subscription = this.subscribe({}, { t -> Log.e(TAG, "", t) }, onCompleted);
本文转自天天_byconan博客园博客,原文链接:http://www.cnblogs.com/tiantianbyconan/p/4829007.html
,如需转载请自行联系原作者
你可能感兴趣的文章
ARM想将芯片装进人类大脑 降低能耗是一大挑战
查看>>
Oracle数据库的备份方法
查看>>
Selenium 自动登录考勤系统
查看>>
关于如何以编程的方式执行TestNG
查看>>
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《第一桶金怎么赚——淘宝开店创业致富一册通》一一第1章 创业梦想,怎样起步...
查看>>
基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
《Exchange Server 2010 SP1/SP2管理实践》——2.4 部署外部网络环境
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
《计算广告:互联网商业变现的市场与技术》一第一部分 在线广告市场与背景...
查看>>