这一篇文章开始,我们要接触更复杂的一些知识点
Operator
翻译过来就是操作符的意思。什么用途呢?
先看场景分析。
一般在学校的学生花名册找一个学生的话,是通过学生的学号。然后通过学号检索出学生的详细情况。现在我们就要做这样的工作,通过学号找出学生,然后在屏幕上显示学生名字。
我们先定义一个Student.java类
public class Student {
private long id;
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后通过学号找学生,假设有这么一个方法getStudentInfo(long id);
public Student getStudentInfo(long id){
Student student = new Student();
student.setId(id);
student.setName("test");
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return student;
}
假设getStudentInfo()比较耗时,我们选择用RxAndroid方式编写代码。
Observable.create(new Observable.OnSubscribe<Student>() {
@Override
public void call(Subscriber<? super Student> subscriber) {
subscriber.onNext(getStudentInfo(123456777));
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Student>() {
@Override
public void call(Student s) {
mTvMsg.setText(s.getName());
}
});
这样的代码没有什么问题。我这里只抛出一个点,因为mTvMsg这个TextView只关心的是一个String对象,上面的例子直接抛出一个Student对象与相应的Subscriber相关联。有没有更进一步呢,让Subscriber只接收String对象,其他的信息不需要关心。
答案是有的,我们可以通过map关键字。