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因为Observableasync,而是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 中做繁重的工作。