使用retrofit异步获取网络数据;在原来的官方demo基础上略加修改;
具体下载链接见:http://download.youkuaiyun.com/download/u014624241/9994368;
1.引入 gradle
compile ‘com.google.code.gson:gson:2.6.2’
compile ‘com.squareup.retrofit2:retrofit:2.1.0’
compile ‘io.reactivex:rxjava:1.1.0’
compile ‘io.reactivex:rxandroid:1.1.0’
compile ‘com.squareup.retrofit2:converter-gson:2.1.0’
compile ‘com.squareup.retrofit2:adapter-rxjava:2.1.0’
2.引入网络包业务,查看包结构
蓝色框内的为httpnet主要业务包;
主要就是编写BqService服务,内的业务接口;
2.1 Bqservice类
public interface BqService {
/**
* 行政区计数--取水计划
*
* @param yr
* @return
*/
@POST("intpl/summer")
Observable<BqAreaCountRespond> getAreaCountGwp(
@Query("yr") String yr
);
/**
* 行政区--取水许可
*
* @return
*/
@POST("wpc/summer")
Observable<BqAreaCountRespond> getAreaCountGw(
);
/**
* 行政区批准排污量汇总--入河排污口
*
* @return
*/
@POST("pdo/summer")
Observable<BqAreaCountRespond> getAreaCountOutlet(
);
}
2.2RetrofitManager类
主要是在这里初始化 retrofit,配置url等;
public class RetrofitManager {
private static Retrofit retrofit;
public static Retrofit getRetrofit(String url, Context context) {
//判断网络状态 无网络时
if (!NetWorkUtils.networkIsAvailable(context)) {
ToastUtils.show(context, "请接连网络");
}
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//新的配置
.baseUrl(AppUtils.BASEIP)
.build();
}
return retrofit;
}
public static Retrofit getRetrofit(String url) {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//新的配置
.baseUrl(url)
.build();
}
return retrofit;
}
public static BqService creatBqService() {
return getRetrofit(AppUtils.BASEIP).create(BqService.class);
}
}
2.3在界面 activity里使用
重要的几点
回调在ui线程,
onNext ,onError,onCompleted
在使用订阅时,一定要注册订阅,添加
RxApiManager.get().add(“gwplanAreaCout”, subscription);
在onDestory里,要记得取消订阅;
/**
* 异步获取行政区列表
*
* @param yr
*/
private void getAreaCountAsync(String yr) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy");
Date date = new Date(System.currentTimeMillis());
String year = simpleDateFormat.format(date);
if (Integer.parseInt(year) < Integer.parseInt(yr)) {
ToastUtils.show(mContext, "请选择正确的年份!");
return;
}
loadDialog();
Subscription subscription = RetrofitManager.creatBqService().getAreaCountGwp(yr)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<BqAreaCountRespond>() {
@Override
public void onCompleted() {
LogUtils.e("sjt", "完成--completed");
}
@Override
public void onError(Throwable e) {
ToastUtils.show(mContext, "服务器开小差了");
listAreaCount.clear();
BqGetwAndOutletAreaCountAdapter simpleAdapter = new BqGetwAndOutletAreaCountAdapter(mContext, listAreaCount);
lvArea.setAdapter(simpleAdapter);
simpleAdapter.notifyDataSetChanged();
dismissLoadingDialog();
}
@Override
public void onNext(BqAreaCountRespond bqAreaCountRespond) {
dismissLoadingDialog();
int code = bqAreaCountRespond.getCode();
if (code == 1) {
listAreaCount = bqAreaCountRespond.getResult();
if (listAreaCount.size() != 0) {
tvwWaterSum.setText("全市(" + listAreaCount.get(0).getSum() + "万m³)");
listAreaCount.remove(0);
} else {
tvwWaterSum.setText("全市( 万m³)");
listAreaCount.clear();
ToastUtils.show(mContext, "无数据");
}
} else {
tvwWaterSum.setText("全市( 万m³)");
listAreaCount.clear();
LogUtils.e("sjt", "无数据");
ToastUtils.show(mContext, "无数据");
}
BqGetwAndOutletAreaCountAdapter simpleAdapter = new BqGetwAndOutletAreaCountAdapter(mContext, listAreaCount);
lvArea.setAdapter(simpleAdapter);
simpleAdapter.notifyDataSetChanged();
}
});
RxApiManager.get().add("gwplanAreaCout", subscription);
}
/**
* 加载dialog
*/
public void loadDialog(){
loadingDialog.show();
}
/**
* 取消dialog
*/
public void dismissLoadingDialog(){
loadingDialog.dismiss();
}
@Override
protected void onDestroy() {
super.onDestroy();
// RxApiManager.get().cancel("getwaterplan");
// RxApiManager.get().cancel("gwplanAreaCout");
RxApiManager.get().cancelAll();
}
3.工程代码直接下载
我放到:csdn里资源下载了;
http://download.youkuaiyun.com/download/u014624241/9994368;