如何将数组转换为可观察的

时间:2018-07-17 10:44:18

标签: android rx-java rx-java2 rx-android

如以下代码所示,我想使用RxAndroid。但我面临两个问题:

1-我想将Array转换为observable,但是无法识别.fromArray方法

2-为什么在Observer界面中我没有实现onSubscribe(Disposable d)?

请让我知道如何解决这两个问题。

构建gradle

compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.9'

代码

import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;

    //fromArray is not defined
  private Observable<String> getAnimalsObservable() {
    return Observable.fromArray(
            "Ant", "Ape",
            "Bat", "Bee", "Bear", "Butterfly",
            "Cat", "Crab", "Cod",
            "Dog", "Dove",
            "Fox", "Frog");
}

//why in the following interface, i dont have onSubscribe(Disposable d)
private Observer<String> getAnimalsObserver() {
    return new Observer<String>() {
        @Override
        public void onNext(String s) {
            Log.d(TAG, "Name: " + s);
        }

        @Override
        public void onError(Throwable e) {
            Log.e(TAG, "onError: " + e.getMessage());
        }

        @Override
        public void onCompleted() {
            Log.d(TAG, "All items are emitted!");
        }
    };
}

4 个答案:

答案 0 :(得分:1)

您最好升级rxjava,实际上您正在使用rxjava1。

检查latest version

然后,fromArray应该可以工作,您将处理DisposableObserver接口或Observer接口(rxjava> = 2.16)。

请注意,onSubscribe(Disposable d)是在Observer界面中定义的。

希望我会帮助您

答案 1 :(得分:0)

private Observable<String> getAnimalsObservable() {
    return Observable.from(Arrays.asList(
        new String[] {
            "Ant", "Ape",
            "Bat", "Bee", "Bear", "Butterfly",
            "Cat", "Crab", "Cod",
            "Dog", "Dove",
            "Fox", "Frog"}
    ));
}

您可以这样订阅

getAnimalsObservable().subscribe(i -> {
    // Do some thing with 'i', it's a list of String.
});

或者您也可以这样做

Observable.from(Arrays.asList(new String[] {"1", "2", "3", }))
.subscribe(i -> {
    // Do some thing with 'i', it's a list.
});

答案 2 :(得分:0)

您正在使用RxJava1。我记不清楚了,但是为什么不使用RxJava 2? 在RxJava github上:

  

1.x版本已于2018年3月31日终止生命。将不会进行进一步的开发,支持,维护,PR和更新。最新版本的Javadoc 1.3.8仍可访问。

也许第二版将帮助您解决问题

答案 3 :(得分:0)

使用 fromIterable

示例:

val arraylist: ArrayList<CustomObject>
Observable.fromIterable(arraylist)