RxAndroid的使用方式2-进阶

上一篇介绍了环境搭建,并熟悉了初步的使用方式, 要再学习一些其他方法, 如

just: 获取输入数据, 直接分发, 更加简洁, 省略其他回调
from: 获取输入数组, 转变单个元素分发
map: 映射, 对输入数据进行转换, 如大写
flatMap: 增大, 本意就是增肥, 把输入数组映射多个值, 依次分发
reduce: 简化, 正好相反, 把多个数组的值, 组合成一个数据

先来看下代码:
{% highlight java %}
final String[] mManyWords = {“欢”, “迎”, “使”, “用”};
final List mManyWordList = Arrays.asList(mManyWords);

// Action类似订阅者, 设置TextView
private Action1<String> mTextViewAction = new Action1<String>() {
    @Override
    public void call(String s) {
        mTvText.setText(s);
    }
};

// Action设置Toast
private Action1<String> mToastAction = new Action1<String>() {
    @Override
    public void call(String s) {
        Toast.makeText(MoreActivity.this, s, Toast.LENGTH_SHORT).show();
    }
};

// 设置映射函数(把list转化为字符串)
private Func1<List<String>, Observable<String>> mOneLetterFunc = new Func1<List<String>, Observable<String>>() {
    @Override
    public Observable<String> call(List<String> strings) {
        return Observable.from(strings); // 映射字符串
    }
};

// 连接字符串
private Func2<String, String, String> mMergeStringFunc = new Func2<String, String, String>() {
    @Override
    public String call(String s, String s2) {
        return String.format("%s %s", s, s2); // 空格连接字符串
    }
};

// 添加信息(对字符串进行任意修改)
private Func1<String, String> mModifyFunc = new Func1<String, String>() {
    @Override
    public String call(String s) {
        return s+"--映映"; // 添加信息
    }
};

{% endhighlight %}

Action1就相当于订阅者,代表最终动作, 因而不需要返回值, 并且一个参数
Func1代表使用一个参数的函数, 前面是参数, 后面是返回值,把数据进行封装处理
上面代码就是两个action,分别从toast和textview输出数据
三个func,一个是把两个字符串连接成一个字符串,一个是在字符串的后面添加内容,还有一个返回的是Observable,为了映射字符串

{% highlight java %}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple);
ButterKnife.bind(this);

    // 添加字符串, 省略Action的其他方法, 只使用一个onNext.
    Observable<String> obShow = Observable.just("欢迎使用");

    // 先映射, 再设置TextView
    obShow.observeOn(AndroidSchedulers.mainThread())
            .map(mModifyFunc).subscribe(mTextViewAction);

    // 单独显示数组中的每个元素
    Observable<String> obMap = Observable.from(mManyWords);

    // 映射之后分发
    obMap.observeOn(AndroidSchedulers.mainThread())
            .map(mModifyFunc).subscribe(mToastAction);

    // 优化过的代码, 直接获取数组, 再分发, 再合并, 再显示toast, Toast顺次执行.
    Observable.just(mManyWordList)
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap(mOneLetterFunc)
            .reduce(mMergeStringFunc)
            .subscribe(mToastAction);
}

{% endhighlight %}
输入字符串, 添加内容, 输出至控件中显示
输入数组, 单独分发数组中每一个元素, 添加内容, Toast连续显示
输入数组, 映射为单独分发, 并组合到一起, 集中显示

这次使用的是简化代码,因为有时候我们对异常并不是很关心,
只要能catch异常即可, 因此流仅仅关注真正需要的部分
just可以非常简单的获取任何数据, 分发时, 选择使用的线程
map是对输入数据加工, 转换类型, 输入Func1, 对数据进行修改
from是读取数组中的值, 每次单独分发, 并分发多次, 其余类似
flatMap把数组转换为单独分发, Func1内部使用from拆分数组
reduce把单独分发数据集中到一起, 再统一分发, 使用Func2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值