用Kotlin写的RxJava+Retrofit2 0例子

381 阅读1分钟

####前言

  • 自从今年谷歌IO大会,谷歌把Kotlin做为Android亲儿子后,kotlin越来越火,前段时间体验了一把,真的没话说。跟Java相互调用100%无缝对接
  • 在这里记录下RxJava+Retrofit实践的例子 ####正文
  • 首先在gradle中引入下面的包:
dependencies {
   // ......
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
   // ......
}
  • 接下来定义一个接口
import retrofit2.http.POST
import retrofit2.http.QueryMap
import rx.Observable

/**
 * Function:
 * author: limh
 * time:2017/7/21
 *说明:定义返回的数据用Gson格式化成 Response 类型
 */
interface ServerApi {
    @POST("login.do/")
    fun login(@QueryMap params: Map<String, String>): Observable<Response>
}
  • 接收请求的数据通过Gson解析为Response
/**
 * Created by limh on 2017/7/20.
 * 请求响应
 * 要是不考虑打印输出的话一行就搞定,简洁的不要不要的
 */
data class Response(var reqCode: String, var reqMsg: String, var result: List<String>) {
    override fun toString(): String {
        return "Response(reqCode='$reqCode', reqMsg='$reqMsg', result=$result)"
    }
}
  • 对创建Retrofit实例进行封装
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory

/**
 * Function:
 * author: limh
 * time:2017/7/21
 */
class BaseRetrofit {
    private var retrofit: Retrofit

    fun <S> createService(sClass: Class<S>): S {
        return retrofit.create(sClass)
    }

    init {
        val httpClient: OkHttpClient.Builder = OkHttpClient.Builder()
        val builder: Retrofit.Builder = Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .baseUrl("http://192.168.7.111:8080/")
        retrofit = builder.client(httpClient.build()).build()
    }
}
  • 以上就是我对网络请求的封装,只是一个简单的例子,使用的时候可以像下面这样调用:
val params: Map<String, String>=mapOf(Pair("username", editName.text.toString()), Pair("password", editPass1.text.toString()))
val service: ServerApi = BaseRetrofit().createService(ServerApi::class.java)
        service.login(params)
                .subscribeOn(Schedulers.newThread())
                .subscribeOn(Schedulers.io())
                .subscribe({resonse-> }, {e -> }, { })
//注意这里subscribe中的三个大括号分别对应 onNext() onError() onCompleted()
//一般来说只需要在第一个和第二个大括号里写网络请求的处理就行了
// response表示请求结果 e表示错误信息