用Kotlin写的RxJava+Retrofit2 0例子

####前言

  • 自从今年谷歌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表示错误信息
复制代码

转载于:https://juejin.im/post/5a31dc4d6fb9a045023ba5ae

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值