问题是我试图从服务器获取一些数据,而我 subscribeOn(Schedulers.io()),
但是每当我尝试从服务器获取数据时尝试打印当前线程,我就会获得主线程。
我错过了什么吗?首先是一些模拟数据
private static Map<String, User> SERVICE_DATA;
static {
SERVICE_DATA = new LinkedHashMap<>(2);
new User("1", "User1");
new User("2", "User2");
}
这里是onCreate Method
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getUsers()
.flatMap(Flowable::fromIterable)
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
// onNext
users -> {
//do something with the users list
},
// onError
throwable -> {
});
}
这是我获取数据的主要方法
private Flowable<List<User>> getUsers() {
return getRemoteUsers().flatMap(users -> Flowable.fromIterable(users).toList().toFlowable());
}
获取远程数据
private Flowable<List<User>> getRemoteUsers() {
return Flowable
.fromIterable(getMockData())
.delay(5000, TimeUnit.MILLISECONDS)
.toList()
.toFlowable();
}
用服务器中的实际数据替换。
private Collection<User> getMockData() {
Thread t = Thread.currentThread();
Log.d("WTF", "currentThread id: " + t.getId() + " name: " + t.getName());
return SERVICE_DATA.values();
}