目前普遍使用的网络请求框架是Retrofit + OkHttp + RxJava,下面对这个框架进行一个简单详细的介绍
(1)OkHttp,一个优秀的开源网络通信库,它与Android系统原生的HttpURLConnection类似可以实现相同的功能,并且它与原生的对比更加的易用,性能也不低于原生的,所以很受青睐
thread {
val client = OkHttpClient()
val request = Request.Builder()
.url("XXXX")
.build()
val response = client.newCall(request).execute()
val result = response.body()?.string()
}
(2)Retrofit,“如果说OKHttp侧重的是底层通信的实现,那么它就是侧重上层接口的封装”—它也是一个网络通信的库,但是它的底层网络通信的实现则是依赖OkHttp这样的网络通信库,正如介绍的那样,它更侧重上层调用的接口封装,它被大家认可为最好用的网络库。以下代码摘自大神郭霖的第一行代码
val appService = ServiceCreator.create<AppService>()
appService.getAppData().enqueue(object : Callback<List<App>> {
override fun onResponse(call: Call<List<App>>, response: Response<List<App>>) {
val list = response.body()
if (list != null) {
for (app in list) {
Log.d("MainActivity", "id is ${app.id}")
Log.d("MainActivity", "name is ${app.name}")
Log.d("MainActivity", "version is ${app.version}")
}
}
}
override fun onFailure(call: Call<List<App>>, t: Throwable) {
t.printStackTrace()
}
})
object ServiceCreator {
private const val BASE_URL = "http://10.0.2.2/"
private val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
fun <T> create(serviceClass: Class<T>): T = retrofit.create(serviceClass)
inline fun <reified T> create(): T = create(T::class.java)
}
interface AppService {
@GET("get_data.json")
fun getAppData(): Call<List<App>>
}
class App(val id: String, val name: String, val version: String)
(3)RxJava