在kotlin中使用retrofit+rxjava2
来源:互联网 发布:淘宝被投诉三无产品 编辑:程序博客网 时间:2024/05/21 10:28
首先创建个retrofit的单列
/** * Created by JokAr on 2017/6/5. */class NetworkConfig private constructor() { private val DEFAULT_TIMEOUT: Long = 15 private val BASE_URL: String = "http://gank.io/api" var retrofit: Retrofit = initRetrofit() private object Holder { val INSTANCE = NetworkConfig() } companion object{ val instance:NetworkConfig by lazy { Holder.INSTANCE } } private fun initRetrofit(): Retrofit { val interceptor = HttpLoggingInterceptor() if (BuildConfig.DEBUG) interceptor.setLevel(HttpLoggingInterceptor.Level.BODY) else interceptor.setLevel(HttpLoggingInterceptor.Level.NONE) val client = OkHttpClient.Builder() .addInterceptor(interceptor) .retryOnConnectionFailure(true) .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .build() return Retrofit.Builder() .baseUrl(BASE_URL + "/") .client(client) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build() }}
然后创建请求service
/** * Created by JokAr on 2017/6/5. */interface DataService { @GET("data/{type}/{count}/{pageSize}") fun getData(@Path("type") type: String, @Path("count") count: Int, @Path("pageSize") pageSize: Int) : Observable<HttpResult<ArrayList<DataEntities>>>}
其中HttpResult
和DataEntities
元素类为
/** * Created by JokAr on 2017/6/5. */data class DataEntities(@SerializedName("_id") var _id: String, @SerializedName("createdAt") var createdAt: String, @SerializedName("desc") var desc: String, @SerializedName("publishedAt") var publishedAt: String, @SerializedName("source") var source: String, @SerializedName("type") var type: String, @SerializedName("url") var url: String, @SerializedName("used") var used: Boolean, @SerializedName("who") var who: String) : Parcelable { companion object { @JvmField val CREATOR: Parcelable.Creator<DataEntities> = object : Parcelable.Creator<DataEntities> { override fun createFromParcel(source: Parcel): DataEntities = DataEntities(source) override fun newArray(size: Int): Array<DataEntities?> = arrayOfNulls(size) } } constructor(source: Parcel) : this( source.readString(), source.readString(), source.readString(), source.readString(), source.readString(), source.readString(), source.readString(), 1 == source.readInt(), source.readString() ) override fun describeContents() = 0 override fun writeToParcel(dest: Parcel, flags: Int) { dest.writeString(_id) dest.writeString(createdAt) dest.writeString(desc) dest.writeString(publishedAt) dest.writeString(source) dest.writeString(type) dest.writeString(url) dest.writeInt((if (used) 1 else 0)) dest.writeString(who) }}
/** * Created by JokAr on 2017/6/5. */data class HttpResult<T>(@SerializedName("error") var error: Boolean, @SerializedName("results") var results: T?)
然后就是使用方法了
NetworkConfig.instance .retrofit .create(DataService::class.java) .getData("Android", 10, 1) .subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .map(HttpResultFunc()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ result -> Log.d("Kotlin", result.toString()) }, { error -> error.printStackTrace() }, { Log.d("Kotlin", "onComplete") }, { Log.d("Kotlin", "onStart") })
其中HttpResultFunc
为:
/** * Created by JokAr on 2017/6/5. */class HttpResultFunc<T> :Function<HttpResult<T>,T> { override fun apply(tHttpResult: HttpResult<T>?): T { if (tHttpResult != null) { if (tHttpResult?.error) { throw APIException() } } return tHttpResult?.results as T }}
END
到此就结束了,跟在java中使用没多大区别,就只是在最后的subscribe
有点区别,在代码中已注明
阅读全文
0 0
- 在kotlin中使用retrofit+rxjava2
- RxJava2.0+Retrofit使用
- Retrofit接入RxJava2的使用以及XML在Retrofit中的使用
- Retrofit简单使用(Kotlin)
- Rxjava2.0和Retrofit简单封装使用
- RxJava2与Retrofit使用错误记录
- Kotlin使用retrofit实现recyclerview
- 在AndroidStudio中使用Kotlin
- 在kotlin中使用RecyclerView
- 在WebService中使用Retrofit+RxJava
- 在android中使用Retrofit网络框架
- RxJava2.0 和 Retrofit 结合使用时的配置问题
- 使用Rxjava2+Retrofit实现简单的快递查询
- RxJava2笔记(3)—RxJava结合Retrofit使用
- 在Android Studio中使用Kotlin。
- 在android studio中使用kotlin
- 在集成开发环境中使用Kotlin
- Retrofit+Rxjava2问题小记
- SEO每天都应该干点什么?
- eclipse builder workspace
- 剑指Offer-32
- apt-get
- Http协议简单理解
- 在kotlin中使用retrofit+rxjava2
- 在windows系统中实现python3安装lxml
- ubuntu 14.04 64位 安装Opencv3.1.0 (包含opencv_contrib模块)
- USACO-Section 1.5 Number Triangles[贪心]
- ImportError: No module named site
- 方差、偏差、噪声、泛化误差之间的关系
- jQuery UI 和EasyUI冲突与兼容
- Vue.js——60分钟组件快速入门(上篇)
- 前端优化方案