从RxAndroid替换异步任务
我是rxAndroid的新手,我只是想简单地从rxAndroid替换asynTask。我只想在后台使用db query创建一个列表从RxAndroid替换异步任务,android,database,android-asynctask,rx-java,rx-android,Android,Database,Android Asynctask,Rx Java,Rx Android,我是rxAndroid的新手,我只是想简单地从rxAndroid替换asynTask。我只想在后台使用db query创建一个列表 new AsyncTask<Void, Void, Void>() { @Override protected void onPreExecute() { super.onPreExecute(); startSppiner(); } @Ov
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
startSppiner();
}
@Override
protected Void doInBackground(Void... params) {
List<masterDataTable> list = ServatiumApplication.daoSession.getMasterDataTableDao().queryBuilder().where(masterDataTableDao.Properties.MasterType.eq(ParserString.MD_SERVICE_LEVEL), masterDataTableDao.Properties.DeleteFlag.eq(SHOW_FLAG)).orderAsc(masterDataTableDao.Properties.Description).list();
if (list.size() > 0) {
PopUpValues values1 = new PopUpValues();
values1.setValue(ParserString.SELECT_VALUE);
values1.setName(ParserString.SELECT);
serviceLevelList.add(values1);
for (masterDataTable item : list) {
PopUpValues values = new PopUpValues();
values.setValue(item.getLookupCode());
values.setName(item.getDescription());
serviceLevelList.add(values);
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
stopSppiner();
}
}.execute();
newasynctask(){
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
StartSpiner();
}
@凌驾
受保护的Void doInBackground(Void…参数){
List List=ServatiumApplication.daoSession.getMasterDataTableDao().queryBuilder().where(masterDataTableDao.Properties.MasterType.eq(ParserString.MD_服务级别),masterDataTableDao.Properties.DeleteFlag.eq(SHOW_标志)).orderAsc(masterDataTableDao.Properties.Description).List();
如果(list.size()>0){
PopupValues1=新的PopUpValues();
values1.setValue(ParserString.SELECT_VALUE);
values1.setName(ParserString.SELECT);
serviceLevelList.add(值1);
用于(主数据表项:列表){
PopUpValues=新的PopUpValues();
value.setValue(item.getLookupCode());
value.setName(item.getDescription());
serviceLevelList.add(值);
}
}
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
stopspiner();
}
}.execute();
提前谢谢你的帮助 这样就可以了
public void query(){
startSppiner();
Observable.fromCallable(new Func0<List<PopUpValues>>() {
@Override
public List<PopUpValues> call() {
List<masterDataTable> list = ServatiumApplication.daoSession.getMasterDataTableDao().queryBuilder().where(masterDataTableDao.Properties.MasterType.eq(ParserString.MD_SERVICE_LEVEL), masterDataTableDao.Properties.DeleteFlag.eq(SHOW_FLAG)).orderAsc(masterDataTableDao.Properties.Description).list();
List<PopUpValues> serviceLevelList = new ArrayList<PopUpValues>();
if (list.size() > 0) {
PopUpValues values1 = new PopUpValues();
values1.setValue(ParserString.SELECT_VALUE);
values1.setName(ParserString.SELECT);
serviceLevelList.add(values1);
for (masterDataTable item : list) {
PopUpValues values = new PopUpValues();
values.setValue(item.getLookupCode());
values.setName(item.getDescription());
serviceLevelList.add(values);
}
}
return serviceLevelList;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<PopUpValues>>() {
@Override
public void onCompleted() {
stopSppiner();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<PopUpValues> popUpValues) {
// Here you get the serviceLevelList data
}
});
}
公共作废查询(){
StartSpiner();
Observable.fromCallable(新的Func0(){
@凌驾
公共列表调用(){
List List=ServatiumApplication.daoSession.getMasterDataTableDao().queryBuilder().where(masterDataTableDao.Properties.MasterType.eq(ParserString.MD_服务级别),masterDataTableDao.Properties.DeleteFlag.eq(SHOW_标志)).orderAsc(masterDataTableDao.Properties.Description).List();
List serviceLevelList=新建ArrayList();
如果(list.size()>0){
PopupValues1=新的PopUpValues();
values1.setValue(ParserString.SELECT_VALUE);
values1.setName(ParserString.SELECT);
serviceLevelList.add(值1);
用于(主数据表项:列表){
PopUpValues=新的PopUpValues();
value.setValue(item.getLookupCode());
value.setName(item.getDescription());
serviceLevelList.add(值);
}
}
返回serviceLevelList;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
未完成的公共无效(){
stopspiner();
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
public void onNext(列出popUpValues){
//这里是serviceLevelList数据
}
});
}
下面是我尝试使用上面提供的AsyncTask代码转换为Rx的代码。您可能需要稍作修改,但总体流程保持不变
Observable
.fromIterable(
ServatiumApplication.daoSession
.getMasterDataTableDao()
.queryBuilder()
.where(
masterDataTableDao
.Properties
.MasterType
.eq(ParserString.MD_SERVICE_LEVEL),
masterDataTableDao.Properties.DeleteFlag.eq(SHOW_FLAG)
)
.orderAsc(masterDataTableDao.Properties.Description)
.list()
)
//Get item one by one from the above list, create a PopupValues object and add to it
.map(
listItem -> {
PopUpValues values = new PopUpValues();
values.setValue(listItem.getLookupCode());
values.setName(listItem.getDescription());
return values;
}
)
//Convert to List<PopupValues> list. toList() returns Single<List<PopupValues>>
.toList()
//When subscribe is called show spinner
.doOnSubscribe(disposable -> startSppiner())
//When job is done successfully or fails stop spinner
.doOnSuccess(listOfPopupValues -> stopSppiner())
.doOnError(throwable -> stopSpinner())
//Do the job in io() thread
.subscribeOn(Schedulers.io())
//Give the resulting list to mainthread
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
result -> "get the List<PopUpValues>",
error -> new Throwable("")
);
可观察
.不可数(
ServatiumApplication.daoSession
.getMasterDataTableDao()文件
.queryBuilder()
.在哪里(
masterDataTableDao
.物业
.母版
.eq(解析器字符串MD_服务级别),
masterDataTableDao.Properties.DeleteFlag.eq(显示标志)
)
.orderAsc(masterDataTableDao.Properties.Description)
.list()
)
//从上面的列表中逐个获取项,创建一个PopupValues对象并添加到其中
.地图(
列表项->{
PopUpValues=新的PopUpValues();
value.setValue(listItem.getLookupCode());
value.setName(listItem.getDescription());
返回值;
}
)
//转换为列表。toList()返回Single
托利斯先生()
//当subscribe被称为show微调器时
.doOnSubscribe(一次性->StartSpiner())
//当作业成功完成或失败时,停止微调器
.doOnSuccess(人口值列表->StopsPiner())
.doError(可丢弃->停止微调器())
//在io()线程中执行此任务
.subscribeOn(Schedulers.io())
//将结果列表提供给mainthread
.observeOn(AndroidSchedulers.mainThread())
.订阅(
结果->“获取列表”,
错误->新的可丢弃(“”)
);
我只想膨胀一个列表,你不能分享一些与之相关的代码。谢谢回答。我们可以使用同一个Observable从DB获取多个列表吗?如果是,那么如何。视情况而定,多个列表的模型是什么,如果相同,那么是,所有列表都可以组合成一个。如何返回多个列表从基本的rxjava教程和操作符开始。