gpt4 book ai didi

android - 错误转换 observable.subscribe

转载 作者:行者123 更新时间:2023-11-29 23:46:06 26 4
gpt4 key购买 nike

如以下代码所示,我收到有关以下行的错误,因为转换不正确

.subscribe((Consumer<? super List<String>>)getAnimalsObserver());

请告诉我如何解决这个问题。

注意:

I am using the folloing rx versions
compile 'io.reactivex.rxjava2:rxandroid:2.0.2'
compile 'io.reactivex.rxjava2:rxjava:2.0.5'

代码:

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;

公共(public)类 MainActivity 扩展 AppCompatActivity {

getAnimalsObservable()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((Consumer<? super List<String>>)getAnimalsObserver());



private Observer<String> getAnimalsObserver() {
return new Observer<String>() {

@Override
public void onSubscribe(Disposable d) {
Log.i(TAG, "onSubscribe->d: " + d);
}

@Override
public void onNext(String s) {
Log.i(TAG, "onNext->s: " + s);
}

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

@Override
public void onComplete() {
Log.i(TAG, "onComplete");
}
};
}

日志:

Caused by: java.lang.ClassCastException: 
com.example.pc_a.myapplication.MainActivity$1 cannot be cast to
io.reactivex.functions.Consumer
at com.example.pc_a.myapplication.MainActivity.onCreate(MainActivity.java:38)
at android.app.Activity.performCreate(Activity.java:6288)
at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
t android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2642)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2754) 

最佳答案

首先,您不需要转换为 Consumer。其次,您应该按如下方式修改您的Observer 以使其工作(Observer 已经可以在subscribe 中使用)。我对其进行了一些简化以使其更整洁:

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

private Observer<List<String>> getObserver() {
return new Observer<List<String>>() {
@Override
public void onSubscribe(Disposable d) {
//your logic here
}

@Override
public void onNext(List<String> values) {
//your logic here
for (String value : values) {
System.out.print(value + " ");
}
}

@Override
public void onError(Throwable e) {
//your logic here
}

@Override
public void onComplete() {
//your logic here
}
};
}

@Test
public void test() {
// here you can add your observeOn and subscribeOn but they're not important for the test
getAnimalsObservable()
.subscribe(getObserver());
}

输出:

Ant Ape Bat Bee Bear Butterfly Cat Crab Cod Dog Dove Fox Frog

关于android - 错误转换 observable.subscribe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51383413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com