背景
android开发过程中网络请求作为最重要的组成部分之一,然而对于大部分android开发者在网络请求上有太多疑惑,不知道如何去选型?通过原生的HttpClient、HttpUrlConnection封装?还是通过第三方框架再封装?笔者以为采用广泛被使用的第三方网络框架再封装为上策,因为这些网络框架如retrofit、okhttp、volley等是被全球android开发者维护着,无论在功能上、性能上、还是代码简洁性都相对于自己通过原生实现的给力.
目的
致力封装一个简洁、实用、易移植的网络框架模块.
正题
今天笔者就给大家基于retrofit + okhttp + gson 封装一个通用易懂的网络框架模块.
首先我们需要在gradle文件中将第三方依赖引入项目,代码如下:
dependencies {
// retrofit + okhttp + gson
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.google.code.gson:gson:2.7'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
}
接着开始我们的封装之路…
首先我们需要写一个参数常量类,用于定义一些常量,如请求Url地址、接口返回信息,代码如下:
/**
* @className: InterfaceParameters
* @classDescription: 参数配置
* @author: leibing
* @createTime: 2016/8/30
*/
public class InterfaceParameters {
// 请求URL
public final static String REQUEST_HTTP_URL = BuildConfig.API_URL;
// 接口返回结果名称
public final static String INFO = "info";
// 接口返回错误码
public final static String ERROR_CODE = "errorcode";
// 接口返回错误信息
public final static String ERROR_MSG = "errormsg";
}
然后写一个网络请求封装类JkApiRequest.class,采用单例的方式,配置网络请求参数以及返回网络请求api实例,代码如下:
/**
* @className:JkApiRequest
* @classDescription:网络请求
* @author: leibing
* @createTime: 2016/8/30
*/
public class JkApiRequest {
// sington
private static JkApiRequest instance;
// Retrofit object
private Retrofit retrofit;
/**
* Constructor
* @author leibing
* @createTime 2016/08/30
* @lastModify 2016/08/30
* @param
* @return
*/
private JkApiRequest(){
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new OkHttpInterceptor())
.build();
retrofit = new Retrofit.Builder()
.baseUrl(InterfaceParameters.REQUEST_HTTP_URL)
.addConverterFactory(JkApiConvertFactory.create())
.client(client)
.build();
}
/**
* sington
* @author leibing
* @createTime 2016/08/30
* @lastModify 2016/08/30
* @param
* @return
*/
public static JkApiRequest getInstance(){
if (instance == null){
instance = new JkApiRequest();
}
return instance;
}
/**
* create a