rxretrofitlibrary是一个已经写好的网络框架库,先以本地Module导入到自己的项目中。
1、它的初始化操作大多在自定义的application中完成,如:
public class App extends Application { @Override public void onCreate() { super.onCreate(); //初始化网络框架库 RxRetrofitApp.init(this,true); } }
2、在rxretrofitlibrary下定义一个回调信息统一封装类(即实际工作中网络请求的返回json实体类),泛型T表示用户真正关心的数据Data类,例如:
/** * 回调信息统一封装类 */ public class BaseResultEntity<T> { // 判断标示 private int ret; // 提示信息 private String msg; //显示数据(用户需要关心的数据) private T data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } public int getRet() { return ret; } public void setRet(int ret) { this.ret = ret; } }
3、在项目中使用GsonFormat插件快速创建简单的Data实体类
public class Data { private String downurl; private String icoUri; private String name; private String packageName; public String getDownurl() { return downurl; } public void setDownurl(String downurl) { this.downurl = downurl; } public String getIcoUri() { return icoUri; } public void setIcoUri(String icoUri) { this.icoUri = icoUri; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } @Override public String toString() { return "name:"+name+",packageName:"+packageName ; } }
4、在项目下创建相应的网络请求接口(@GET注解后带的参数为网络请求url除BaseUrl部分,因为BaseUrl保存在了5中的请求同一封装类中,便于管理)
public interface HttpGetService { @GET("url") Observable<BaseResultEntity<Data>> getData(); }
5、为了使用方便,在rxretrofitlibrary下再定义一个请求统一封装类BaseApi,此处实现的Func1接口泛型为BaseResultEntity<T>, T。如果在实际项目中,是为了使用RxJava的map操作符将BaseResultEntity<T>转换为T。(转换的方法重点在代码最下面的call方法中,根据实际的业务逻辑来定)
/** * 请求统一封装 * @param <T> */ public abstract class BaseApi<T> implements Func1<BaseResultEntity<T>, T>{ //rx生命周期管理 private SoftReference<RxAppCompatActivity> rxAppCompatActivity; /*回调*/ private SoftReference<HttpOnNextListener> listener; /*是否能取消加载框*/ private boolean cancel; /*是否显示加载框*/ private boolean showProgress; /*是否需要缓存处理*/ private boolean cache; /*基础url*/ private String baseUrl = "http://192.168.0.101:8080/"; /*方法-如果需要缓存必须设置这个参数;不需要不用設置*/ private String mothed; /*超时时间-默认6秒*/ private int connectionTime = 6; /*有网情况下的本地缓存时间默认60秒*/ private int cookieNetWorkTime = 60; /*无网络的情况下本地缓存时间默认30天*/ private int cookieNoNetWorkTime = 24 * 60 * 60 * 30; /* 失败后retry次数*/ private int retryCount = 1; /*失败后retry延迟*/ private long retryDelay = 100; /*失败后retry叠加延迟*/ private long retryIncreaseDelay = 10; public BaseApi(HttpOnNextListener listener, RxAppCompatActivity rxAppCompatActivity) { setListener(listener); setRxAppCompatActivity(rxAppCompatActivity); setShowProgress(false); setCache(false); setCancel(true); setCookieNetWorkTime(60); setCookieNoNetWorkTime(24*60*60); } /** * 设置参数 * * @param