前言
在項(xiàng)目中使用了RxJava了冬阳,真切感受到其強(qiáng)大倘核,對(duì)比AsyncTask跌造,簡(jiǎn)直是云泥之
別。在項(xiàng)目替換Android原生的AsyncTask以及handler成使用RxJava生出感慨间聊,
實(shí)在是爽攒盈,代碼邏輯清晰極了。
注:本篇博文適合已有一定RxJava基礎(chǔ)知識(shí)閱讀哎榴。
1型豁,from操作符
這一個(gè)操作符我用的最多,那么它最佳的應(yīng)用場(chǎng)景是什么呢尚蝌?
- 當(dāng)你有一個(gè)堆數(shù)據(jù)(Future迎变、Iterable和數(shù)組)需要處理,且處理邏輯相同時(shí)飘言。這樣說(shuō)或許有些抽象衣形,打個(gè)比喻:相信大家都配過(guò)鑰匙,假如我要配幾把同一個(gè)門(mén)的鑰匙姿鸿,那么制造這幾把鑰匙的流程都是一模一樣的谆吴。而更簡(jiǎn)潔的概括就是-----有重復(fù)性操作時(shí)就用它就準(zhǔn)沒(méi)錯(cuò)了。
2苛预,map操作符
map名詞是地圖的意思句狼,那么這樣理解這個(gè)操作符就很想不通這個(gè)操作符的 應(yīng)用場(chǎng)景了,但我們敲代碼的不可能不熟悉這一個(gè)數(shù)據(jù)結(jié)構(gòu).
在我使用這個(gè)操作符的理解中,map就是變換需要操作的數(shù)據(jù)內(nèi)容或者結(jié)構(gòu)的意思热某。所以其使用場(chǎng)景顯而易見(jiàn):當(dāng)原始數(shù)據(jù)不能滿(mǎn)足我們的需求腻菇,但我們卻需要依賴(lài)這一原始數(shù)據(jù)去獲取滿(mǎn)足我們需求的數(shù)據(jù)時(shí),那么就用它昔馋,準(zhǔn)沒(méi)錯(cuò)筹吐。
比如:我有一個(gè)圖片url集合,但我的需求卻是依次獲取到bitmap,顯示在ImageView中,那么用該操作符就能解決問(wèn)題了
官方文檔原文:
transform the items emitted by an Observable by applying a function to each item.
我的理解:
通過(guò)使用map中的方法對(duì)Observable中發(fā)射出來(lái)的所有數(shù)據(jù)進(jìn)行變換.(翻譯如有錯(cuò)誤,望指正)
ReactiveX 官方文檔-map
ps:有興趣的話(huà)更希望大家看官方文檔,更加原汁原味
3,filter操作符
filter-----過(guò)濾數(shù)據(jù).這一個(gè)操作符淺顯易懂,根據(jù)一些條件過(guò)濾掉不需要的數(shù)據(jù).
比如說(shuō):*我有一個(gè)圖片url集合,我的需求是依次獲取到bitmap,一些像素不清晰的,我希望排除掉,不顯示在ImageView,而清晰的才顯示在ImageView中.
綜合三個(gè)操作符的偽代碼
Observable
.from(filePathStrS)// String[] filePathStrS :本地圖片路徑數(shù)組
.map(new Func1<String, Bitmap>() {
@Override
public Bitmap call(String s) {
return Utils.getBitmapFromFile(photoPath + s);//通過(guò)map將String變換成Bitmap
}
})
.filter(new Func1<Bitmap, Boolean>() {
@Override
public Boolean call(Bitmap bitmap) {
return bitmap != null;//篩選掉空文件
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Bitmap>() {
@Override
public void call(Bitmap bitmap) {//主線程顯示數(shù)據(jù)
questionBitmapList.set(questionInPicCount, bitmap);
QuestionShowAdapter.notifyDataSetChanged();
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
throwable.printStackTrace();
}
}, new Action0() {
@Override
public void call() {
}
});
RxJava所學(xué)未深,后續(xù)如有學(xué)到新的操作符,將會(huì)更新
如果不合理,望不吝指正.