大家都想在自己的项目中用最简单,最易懂的方式实现功能需求,对于网络请求,而且是基于RxJava+Retrofit,本世纪最先进的网络框架的封装我们该如何封装呢
接下来我说一下使用步骤具体请看我给出的源码地址
下载依赖
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
RxRetrofitApp.init(this,BuildConfig.DEBUG);
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
下面介绍怎么使用本框架
我们这里对下面这个网址进行数据请求
https://appapi.daqsoft.com/sxhtams/rest/sxhAppData/appData.action?method=queryAppMonitorLists&vcode=d80f699c062c8662fad3df86024e246c
一家公司的数据基本上有统一的格式,我们只需抽取data需要的数据出来就行
BaseResultEntity是我们数据获取的基础格式比如
我们只关心datas数据哈,根据你公司的习惯改成对应的就是。,然后把需要的databean类方便后面使用
参见项目 BaseResultEntity
修改BaseApi的方法 call回调错误 信息统一处理。
然后修改baseUrl成自己的,或者外面动态设置
package com.example.retrofit.example.api;
import com.example.retrofit.example.services.MyService;
import com.trello.rxlifecycle.components.support.RxAppCompatActivity;
import com.wzgiceman.rxretrofitlibrary.retrofit_rx.Api.BaseApi;
import com.wzgiceman.rxretrofitlibrary.retrofit_rx.listener.HttpOnNextListener;
import retrofit2.Retrofit;
import rx.Observable;
/**
* Created by yanbo on 2017/6/13.
*/
public class ExampleApi extends BaseApi{
//请求需要的参数,
private String method;//app_api方法名
private String vcode;//景区vcode
//get set 参数
public String vCode() {
return vcode;
}
public void setVcode(String vcode) {
this.vcode = vcode;
}
public String mEthod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public ExampleApi(HttpOnNextListener listener, RxAppCompatActivity rxAppCompatActivity) {
super(listener, rxAppCompatActivity);
setShowProgress(true);
setCancel(true);
setCache(true);
setMothed("appData.action");
setCookieNetWorkTime(60);
setCookieNoNetWorkTime(24*60*60);
}
@Override
public Observable getObservable(Retrofit retrofit) {
MyService myService = retrofit.create(MyService.class);
return myService.getVideoList(mEthod(),vCode());
}
}
public interface MyService {
@GET("appData.action")
Observable> getVideoList(@Query("method") String method,@Query("vcode") String vcode);
}
好了万事具备只欠东风了我们把镜头转向需要进行网络请求的页面。
首先我们使页面继承extends RxAppCompatActivity(要管理Rx生命周期)
//回调
HttpOnNextListener videoOnNextListener = new HttpOnNextListener() {
@Override
public void onNext(VideoBean videoBean) {
Log.e("----------","网络返回"+videoBean.toString());
}
@Override
public void onCacheNext(String cache) {
/*缓存回调*/
Gson gson=new Gson();
java.lang.reflect.Type type = new TypeToken>() {}.getType();
BaseResultEntity resultEntity= gson.fromJson(cache, type);
Log.e("----------","缓存返回"+resultEntity.getDatas().toString());
}
/*用户主动调用,默认是不需要覆写该方法*/
@Override
public void onError(Throwable e) {
super.onError(e);
Log.e("----------","失败"+e.toString());
}
/*用户主动调用,默认是不需要覆写该方法*/
@Override
public void onCancel() {
super.onCancel();
Log.e("----------","取消请求");
}
};
点击按钮执行这方法进行网络请求
private void showHttp() {
VideoApi api = new VideoApi(videoOnNextListener,this);
//请求参数
api.setMethod("queryAppMonitorLists");
api.setVcode("d80f699c062c8662fad3df86024e246c");
HttpManager manager = HttpManager.getInstance();
manager.doHttpDeal(api);
}
请看日志
功能待续,还没介绍完哈