Observable.fromCallable() 不使用 RXJava 从 Android 中的 Arraylist Return 数据
Observable.fromCallable() does not Return data from Arraylist in Android using RXJava
我正在尝试使用 RXjava 从 Android
中的 Arraylist 获取数据
public ArrayList<String> SelecIDValueGetterObservable(Context mContext) {
ArrayList<String> SelectedIds = new ArrayList<>();
CompositeDisposable mCompositeDisposable = new CompositeDisposable();
mCompositeDisposable.add(Observable.fromCallable(() -> SelecetIDValuegetter(mContext))
.subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<ArrayList<String>>() {
@Override
public void onNext(ArrayList<String> IdObsList) {
Toast.makeText(mContext,
"size " + IdObsList.size(), Toast.LENGTH_LONG).show();
for (int i = 0; i < IdObsList.size(); i++) {
SelectedIds.add(IdObsList.get(i));
}
}
@Override
public void onError(Throwable e) {
FirebaseCrashlytics.getInstance().recordException(e);
}
@Override
public void onComplete() {
// mCompositeDisposable.dispose();
}
})
);
return SelectedIds;
}
SelecetIDValuegetter(mContext)
是这样的
public ArrayList<String> SelecetIDValuegetter(Context mContext) {
ArrayList<String> SelectedIds = new ArrayList<>();
SelectedIds .add("A");
SelectedIds .add("B");
SelectedIds .add("C");
SelectedIds .add("D");
return SelectedIds ;
}
如果SelecetIDValuegetter能正常发出数据,在Rxjava中不管用,怎么办呢
如果你想使用Observable
,你不应该直接returnlist
因为Observable
是async
,而是returnObservable
并订阅接收数据
public Observable<List<String>> SelecIDValueGetterObservable(Context mContext) {
return Observable.fromCallable(() -> SelecetIDValuegetter(mContext));
}
//at receiver end
SelecIDValueGetterObservable(this)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(IdObsList -> {
//ypu will get the list here
});
附带说明一下,不确定是否需要在 SelecetIDValuegetter
之间使用 Observable
,您可以直接 return list
而不是使用 Observable
因为你没有在方法 SelecetIDValuegetter
AFAIK 中做繁重的工作。
我正在尝试使用 RXjava 从 Android
中的 Arraylist 获取数据public ArrayList<String> SelecIDValueGetterObservable(Context mContext) {
ArrayList<String> SelectedIds = new ArrayList<>();
CompositeDisposable mCompositeDisposable = new CompositeDisposable();
mCompositeDisposable.add(Observable.fromCallable(() -> SelecetIDValuegetter(mContext))
.subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<ArrayList<String>>() {
@Override
public void onNext(ArrayList<String> IdObsList) {
Toast.makeText(mContext,
"size " + IdObsList.size(), Toast.LENGTH_LONG).show();
for (int i = 0; i < IdObsList.size(); i++) {
SelectedIds.add(IdObsList.get(i));
}
}
@Override
public void onError(Throwable e) {
FirebaseCrashlytics.getInstance().recordException(e);
}
@Override
public void onComplete() {
// mCompositeDisposable.dispose();
}
})
);
return SelectedIds;
}
SelecetIDValuegetter(mContext)
是这样的
public ArrayList<String> SelecetIDValuegetter(Context mContext) {
ArrayList<String> SelectedIds = new ArrayList<>();
SelectedIds .add("A");
SelectedIds .add("B");
SelectedIds .add("C");
SelectedIds .add("D");
return SelectedIds ;
}
如果SelecetIDValuegetter能正常发出数据,在Rxjava中不管用,怎么办呢
如果你想使用Observable
,你不应该直接returnlist
因为Observable
是async
,而是returnObservable
并订阅接收数据
public Observable<List<String>> SelecIDValueGetterObservable(Context mContext) {
return Observable.fromCallable(() -> SelecetIDValuegetter(mContext));
}
//at receiver end
SelecIDValueGetterObservable(this)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(IdObsList -> {
//ypu will get the list here
});
附带说明一下,不确定是否需要在 SelecetIDValuegetter
之间使用 Observable
,您可以直接 return list
而不是使用 Observable
因为你没有在方法 SelecetIDValuegetter
AFAIK 中做繁重的工作。