codeegginterviewgroup / CodeEggDailyInterview

码个蛋每日面试题
396 stars 54 forks source link

简述下okhttp和retrofit的使用和联系 #112

Open kukyxs opened 5 years ago

lydlovezjr commented 5 years ago

OkHttp是一个关于网络请求的第三方类库,其中封装了网络请求的get、post等操作的底层实现,是Android端目前最为火热的网络请求框架之一。

get同步请求: 首先使用new创建OkHttpClient对象。 然后调用OkHttpClient对象的newCall方法生成一个Call对象,该方法接收一个Request对象,Request对象存储的就是我们的请求URL和请求参数。 最后执行Call对象的execute方法,得到Response对象,这个Response对象就是返回的结果。

get异步请求: 首先使用new创建OkHttpClient对象。 然后调用OkHttpClient对象的newCall方法生成一个Call对象,该方法接收一个Request对象,Request对象存储的是我们的请求URL和请求参数。 最后执行Call对象的enqueue方法,该方法接收一个Callback回调对象,在回调对象的onResponse方法中拿到Response对象,这就是返回的结果。 总结:get的同步方法和异步方法的差别在于同步方法需要手动开启一个线程执行,而异步方法不需要(其实是使用了内部的线程)。

post同步请求: post方法的同步请求和get方法的同步请求几乎是一样的 post方法的同步请求和get方法的同步请求的区别在于,post方法生成Request对象时多执行了post(RequestBody)方法, 而RequestBody对象的子类是FormBody类,所以可以使用FormBody对象创建键值对参数。

post异步请求: 异步请求post方法的异步请求和get方法的异步请求也是非常相似的,区别也是同步请求的区别。

Retrofit是一个RESTful的HTTP网络请求框架,它是基于OkHttp的。它是通过注解配置网络参数的,支持多种数据的解析和序列化。 1)添加网络请求的接口 2)创建Retrofit对象 3)创建网络请求接口实例 4)发送网络请求

总结: Retrofit的一个RESTful风格的网络请求框架,其下一层的实现也是OkHttp,所以其原理和OkHttp的一样的,只是在OkHttp的上面封装了一层,使请求接口和数据解析更加简洁明了。

参考链接: https://juejin.im/post/5d7318935188250c992d56d9