getUserObservable方法发出一些用户,我需要知道他为什么放 .subscribeOn(Schedulers.io()),而他已经在主要功能上调用它 我提供了两种方法的摘录 我知道subscribeOn会使进程在后台线程上发生,但是当他两次调用它时,这将使我不知道有什么不同,因为我知道只在getUsersObservable中调用一次就足够了
private Observable<User> getUsersObservable() {
String[] maleUsers = new String[]{"Mark", "John", "Trump", "Obama"};
final List<User> users = new ArrayList<>();
for (String name : maleUsers) {
User user = new User();
user.setName(name);
user.setGender("male");
users.add(user);
}
return Observable
.create(new ObservableOnSubscribe<User>() {
@Override
public void subscribe(ObservableEmitter<User> emitter) throws Exception {
for (User user : users) {
if (!emitter.isDisposed()) {
emitter.onNext(user);
}
}
if (!emitter.isDisposed()) {
emitter.onComplete();
}
}
}).subscribeOn(Schedulers.io());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_operator);
getUsersObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(new Function<User, User>() {
@Override
public User apply(User user) throws Exception {
// modifying user object by adding email address
// turning user name to uppercase
user.setEmail(String.format("%s@rxjava.wtf", user.getName()));
user.setName(user.getName().toUpperCase());
return user;
}
})
.subscribe(new Observer<User>() {
@Override
public void onSubscribe(Disposable d) {
disposable = d;
}
@Override
public void onNext(User user) {
Log.e(TAG, "onNext: " + user.getName() + ", " + user.getGender() + ", " + user.getAddress().getAddress());
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e(TAG, "All users emitted!");
}
});
}
答案 0 :(得分:1)
通常这样做有两个原因:
但是,如果您确实知道,它将始终是同一调度程序,则也可以将main
移到方法本身中。
编辑
我没有看到fun serializer(data: Any) = if (data is List<*>) {
if (data is EmptyList) String::class.serializer().list // any class with serializer
data.first()::class.serializer().list
} else data.serializer()
方法中已经调用了subscribeOn()
。调用方法时,在方法和中内部调用它没有意义。对我来说,这似乎是个错误。如上所述,通常.subscribeOn()是在方法外部调用的,但是您也可以在内部进行调用。两者都没有意义。