将 Arraylist<Object> 方法转换为 RxJava Observable
Converting an Arraylist<Object> method into RxJava Observable
我在 android 中遇到了 RxJava,它是一个很好的库。我是初学者,我了解它是如何工作的,但是我在将我的旧代码转换为 RxJava 风格的编程时遇到了一些麻烦。
下面是我用来填充对象数组列表的旧代码。
public ArrayList<AppModel> getMyAppList(PackageManager pm, List<ApplicationInfo> list){
ArrayList<AppModel> temp = new ArrayList<>();
for(int d=0;d<list.size();d++){
ApplicationInfo infos = list.get(d);
AppModel model = new AppModel();
model.set_id(d);
model.setApp_name(""+infos.loadLabel(pm));
model.setPackage_name(""+infos.packageName);
model.setIcon(infos.loadIcon(pm));
//Log.e("resolve "," "+infos.loadIcon(pm));
temp.add(model);
}
return temp;
}
我想要的是将此方法转换为 Observable 并利用 RxJava 功能。
public Observable<AppModel> getMyAppList(PackageManager pm, List<ApplicationInfo> list){
return Observable
.from(list)
.subscribeOn(Schedulers.computation())
.doOnNext(new Action1<ApplicationInfo>() {
@Override
public void call(ApplicationInfo applicationInfo) {
AppModel mm = new AppModel();
mm.set_id(applicationInfo.hashCode());
mm.setApp_name(""+applicationInfo.loadLabel(pm));
mm.setPackage_name(""+applicationInfo.packageName);
mm.setIcon(applicationInfo.loadIcon(pm));
//add the models to a list
}
}).//return as Observable<AppModel>
}
我目前不知道如何 return 对象进入 Observable 或者应该是我的方法 return 而不是 Observable<ArrayList<AppModel>>>
。
你应该使用 map 而不是 doOnNext
public Observable<AppModel> getMyAppList(final PackageManager pm, List<ApplicationInfo> list){
return Observable
.from(list)
.subscribeOn(Schedulers.computation())
.map(new Func1<ApplicationInfo, AppModel >() {
@Override
public AppModel call(ApplicationInfo applicationInfo) {
AppModel mm = new AppModel();
mm.set_id(applicationInfo.hashCode());
mm.setApp_name(""+applicationInfo.loadLabel(pm));
mm.setPackage_name(""+applicationInfo.packageName);
mm.setIcon(applicationInfo.loadIcon(pm));
return mm;
}
});
}
如果您想 return 列出而不是发出每个项目,请在映射后添加:
.toList();
我在 android 中遇到了 RxJava,它是一个很好的库。我是初学者,我了解它是如何工作的,但是我在将我的旧代码转换为 RxJava 风格的编程时遇到了一些麻烦。
下面是我用来填充对象数组列表的旧代码。
public ArrayList<AppModel> getMyAppList(PackageManager pm, List<ApplicationInfo> list){
ArrayList<AppModel> temp = new ArrayList<>();
for(int d=0;d<list.size();d++){
ApplicationInfo infos = list.get(d);
AppModel model = new AppModel();
model.set_id(d);
model.setApp_name(""+infos.loadLabel(pm));
model.setPackage_name(""+infos.packageName);
model.setIcon(infos.loadIcon(pm));
//Log.e("resolve "," "+infos.loadIcon(pm));
temp.add(model);
}
return temp;
}
我想要的是将此方法转换为 Observable 并利用 RxJava 功能。
public Observable<AppModel> getMyAppList(PackageManager pm, List<ApplicationInfo> list){
return Observable
.from(list)
.subscribeOn(Schedulers.computation())
.doOnNext(new Action1<ApplicationInfo>() {
@Override
public void call(ApplicationInfo applicationInfo) {
AppModel mm = new AppModel();
mm.set_id(applicationInfo.hashCode());
mm.setApp_name(""+applicationInfo.loadLabel(pm));
mm.setPackage_name(""+applicationInfo.packageName);
mm.setIcon(applicationInfo.loadIcon(pm));
//add the models to a list
}
}).//return as Observable<AppModel>
}
我目前不知道如何 return 对象进入 Observable 或者应该是我的方法 return 而不是 Observable<ArrayList<AppModel>>>
。
你应该使用 map 而不是 doOnNext
public Observable<AppModel> getMyAppList(final PackageManager pm, List<ApplicationInfo> list){
return Observable
.from(list)
.subscribeOn(Schedulers.computation())
.map(new Func1<ApplicationInfo, AppModel >() {
@Override
public AppModel call(ApplicationInfo applicationInfo) {
AppModel mm = new AppModel();
mm.set_id(applicationInfo.hashCode());
mm.setApp_name(""+applicationInfo.loadLabel(pm));
mm.setPackage_name(""+applicationInfo.packageName);
mm.setIcon(applicationInfo.loadIcon(pm));
return mm;
}
});
}
如果您想 return 列出而不是发出每个项目,请在映射后添加:
.toList();