Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从RxAndroid替换异步任务_Android_Database_Android Asynctask_Rx Java_Rx Android - Fatal编程技术网

从RxAndroid替换异步任务

从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

我是rxAndroid的新手,我只是想简单地从rxAndroid替换asynTask。我只想在后台使用db query创建一个列表

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教程和操作符开始。