源码下载链接已经在篇尾给出
一:首先将网络请求需要的依赖添加到build.gradle中:
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0"
//RxJava
implementation "io.reactivex.rxjava2:rxjava:2.2.0"
//RxAndroid
implementation "io.reactivex.rxjava2:rxandroid:2.0.2"
二:我们以访问github的api为例,请求网络:
- 创建数据类(这里借助JsonToKotlinClass.jar,在篇尾会给出该jar包的链接)
kotlin会默认帮我们创建好get()方法,如果想同时创建 getter 和 setter 方法需要将关键字val 更改为 var。
data class UserInfoEntity(
val login: String,
val id: Int,
val node_id: String,
val avatar_url: String,
val gravatar_id: String,
val url: String,
val html_url: String,
val followers_url: String,
val following_url: String,
val gists_url: String,
val starred_url: String,
val subscriptions_url: String,
val organizations_url: String,
val repos_url: String,
val events_url: String,
val received_events_url: String,
val type: String,
val site_admin: Boolean,
val name: Any,
val company: Any,
val blog: String,
val location: Any,
val email: Any,
val hireable: Any,
val bio: Any,
val public_repos: Int,
val public_gists: Int,
val followers: Int,
val following: Int,
val created_at: String,
val updated_at: String
)
data class FollowersEntity(
val login: String,
val id: Int,
val node_id: String,
val avatar_url: String,
val gravatar_id: String,
val url: String,
val html_url: String,
val followers_url: String,
val following_url: String,
val gists_url: String,
val starred_url: String,
val subscriptions_url: String,
val organizations_url: String,
val repos_url: String,
val events_url: String,
val received_events_url: String,
val type: String,
val site_admin: Boolean
)
三:创建Api
interface Api {
@GET("users/{path}")
fun getUserInfo(@Path("path") string: String): Call<UserInfoEntity>
@GET("users/HexlDL/followers")
fun getFollowers():Observable<List<FollowersEntity>>
}
四:接下来就是我们要访问网络请求的代码:
- 创建Retrofit
val baseUrl: String = "https://api.github.com/"
val retrofit = Retrofit.Builder()
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build()
val api = retrofit.create(Api::class.java)
- 使用Retrofit默认访问方式,不引入Rxjava
api.getUserInfo("HexlDL")
.enqueue(object : Callback<UserInfoEntity> {
override fun onFailure(call: Call<UserInfoEntity>?, t: Throwable?) {
println(t?.localizedMessage)
}
override fun onResponse(call: Call<UserInfoEntity>?, response: Response<UserInfoEntity>?) {
val userInfoEntity = response?.body()//获取请求数据实体
println(userInfoEntity.toString())//打印请求结果
}
})
- 使用Rxjava访问
api.getFollowers()
.subscribeOn(Schedulers.io())//切换io线程请求网络
.unsubscribeOn(AndroidSchedulers.mainThread())//切换到ui主线程更新ui
.subscribe({ result ->//请求结果
println(result.toString())
}, { error ->//请求错误
println(error.message)
}, {//请求完成
println("complete")
})