[Android]使用Kotlin开发Android(二)


以下内容为原创,欢迎转载,转载请注明
来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4829007.html

[TOC]

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

代码:https://github.com/wangjiegulu/KotlinAndroidSample

1. 需要

2. Kotlin搭建环境

见之前的文章:[Android]使用Kotlin+Anko开发Android(一)

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<Response> = 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 <T> Observable<T>.observeOnMain(): Observable<T> = this.observeOn(AndroidSchedulers.mainThread())

fun <T> Observable<T>.subscribeSafeNext(onNext: (T) -> Unit): Subscription = this.subscribe(onNext, { t -> Log.e(TAG, "", t) }, {});

fun <T> Observable<T>.subscribeSafeCompleted(onCompleted: () -> Unit): Subscription = this.subscribe({}, { t -> Log.e(TAG, "", t) }, onCompleted);
时间: 2024-11-10 00:44:31

[Android]使用Kotlin开发Android(二)的相关文章

使用Kotlin开发Android应用的初体验

昨晚,最近一届的谷歌IO大会正式将Kotlin确定为了官方开发语言,作为一名Android开发鸟,怎么能不及时尝尝鲜呢? Kotlin的简要介绍 在开发之前,很多同学一定有很多疑问,Kotlin到底有啥好处,怎么和现有的项目共存呢?Java那么些特性Kotlin都有吗?嗯,让我们一一来看. Kotlin 非常适合开发 Android 应用程序,将现代语言的所有优势带入 Android 平台而不会引入任何新的限制: 兼容性:Kotlin 与 JDK 6 完全兼容,保障了 Kotlin 应用程序可以

使用Kotlin开发Android应用教程

使用Kotlin开发Android应用 1.Kotlin介绍 [Kotlin](https://kotlinlang.org/) Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者.Java是世界上使用最多的编程语言之一,当其他编程语言为更加便于开发者使用而不断进化时,Java并没有像预期那样及时跟进. Java缺失的很多特性在最新的修订版中逐渐覆盖到了,但Android开发者暂时还没能够使用它们.这就使得类似Kotlin这样的语言有了用武之地了:

android 虚拟机-eclipse 开发android,虚拟机开机后什么都没有,界面是黑的,求各位大大们帮忙看看

问题描述 eclipse 开发android,虚拟机开机后什么都没有,界面是黑的,求各位大大们帮忙看看 如题,右上角有个破碎的手图案,双击后出现"Voice actions disabled in this preview Swipe to dismiss",这是为什么 解决方案 1.关键字百度谷歌 2.到官网重新下个eclipse 3.把电脑砸了

android 照相-在开发Android应用时,在点击拍照的时候会挤压照片。

问题描述 在开发Android应用时,在点击拍照的时候会挤压照片. 用camera.getParameters().getSupportedPreviewSizes()得到摄像头支持的分辨率大小,为什么有的分辨率在点击拍照时会挤压照片.(并不是所有的分辨率会,有的就会). 解决方案 http://www.cfanz.cn/?c=article&a=read&id=65444

HTML/JS 调用android方法,开发 Android。

初次尝试用HTML/JS开发Android. 由于业务需求和大趋势导致,目前纵观很多APP.很多都是用H5+native的方式去开发.关于wepApp和nativeApp它们之前的是是非非就不说了. 下面是利用H5应该是JS去调用本地Android的代码. 不是什么特别高深的东西. 第一布局: 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools=&qu

用Kotlin优雅地开发Android应用

写在前面 在之前的一篇文章,我们简单的知道了Kotlin这门新语言的优势,也接触了一些常见的语法及其简单的使用,相信你会对它有浓厚的兴趣,暂且理解为对它感兴趣吧,哈哈哈.那么,我们该如何在Android中应用这门新的语言呢?今天的这篇文章带你学习使用Kotlin开发Android应用,并对比我们传统语言Java,让你真真切切的感受到他的美和优雅. 配置 项目gradle文件 apply plugin: 'com.android.application'    apply plugin:'kotl

如何使用Kotlin进行Android开发

Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者.Java是世界上使用最多的编程语言之一,当其他编程语言为更加便于开发者使用而不断进化时,Java并没有像预期那样及时跟进. Kotlin是由JetBrains创建的基于JVM的编程语言,IntelliJ正是JetBrains的杰作,而Android Studio是基于IntelliJ修改而来的.Kotlin是一门包含很多函数式编程思想的面向对象编程语言. Kotlin生来就是为了弥补Java缺失的

软件-适合开发android的ecplise版本

问题描述 适合开发android的ecplise版本 适合开发android的ecplise版本,最好是目前软件公司安装的那种版本,不要my-ecplise,感谢 解决方案 我的ecplise 版本android关于使用哪个版本开发的讨论 解决方案二: 建议用Android Studio开发 解决方案三: myeclipse是开发javaee的,eclipse+adt+android sdk就可以开发android应用.http://blog.csdn.net/chinacsharper/art

Xamarin框架开发Android搜索框 Search Dialog实例

Android 的搜索有两种可用方式:Search Dialog,SearchView. SearchView 简单,随意使用,这里主要说说 Search Dialog 的基本用法, 因为 Xamarin 的处理方式稍稍和 原生 Android 有些不同. 效果: Searchable 要使用 Search Dialog 需要配置一个搜索配置文件 : 放到Resources/xml 目录下 . 如果xml 目录不存在,需要手动创建一个. 文件名随便, 一般取 searchable.xml <?x