Skip to content

Commit 525dc57

Browse files
author
alafighting
committed
支持更多的缓存策略
1 parent 6255514 commit 525dc57

File tree

4 files changed

+59
-5
lines changed

4 files changed

+59
-5
lines changed

app/src/main/java/com/im4j/kakacache/rxjava/demo/MainActivity.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@
77
import android.widget.Button;
88

99
import com.im4j.kakacache.rxjava.netcache.RxRemoteCache;
10-
import com.im4j.kakacache.rxjava.netcache.strategy.FirstCacheStrategy;
10+
import com.im4j.kakacache.rxjava.netcache.strategy.CacheAndRemoteStrategy;
1111

1212
import java.util.concurrent.TimeUnit;
1313

14+
import rx.Observable;
15+
import rx.Subscriber;
16+
1417
/**
1518
* Demo主界面
1619
* @version alafighting 2016-06
@@ -27,7 +30,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
2730

2831
btnTest = (Button) findViewById(R.id.btn_test_cache);
2932
btnTest.setOnClickListener(view -> {
30-
remote().compose(RxRemoteCache.transformer(KEY_CACHE, new FirstCacheStrategy())).subscribe(data -> {
33+
remote().compose(RxRemoteCache.transformer(KEY_CACHE, new CacheAndRemoteStrategy())).subscribe(data -> {
3134
Log.e("main", "next data=" + data);
3235
}, error -> {
3336
Log.e("main", "error", error);
@@ -38,7 +41,14 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
3841
}
3942

4043
private rx.Observable<String> remote() {
41-
return rx.Observable.just("test remote").delay(3, TimeUnit.SECONDS);
44+
return Observable.create(new Observable.OnSubscribe<String>() {
45+
@Override
46+
public void call(Subscriber<? super String> subscriber) {
47+
Log.e("main", "loadRemote");
48+
subscriber.onNext("test remote");
49+
subscriber.onCompleted();
50+
}
51+
}).delay(3, TimeUnit.SECONDS);
4252
}
4353

4454
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.im4j.kakacache.rxjava.netcache.strategy;
2+
3+
import com.im4j.kakacache.rxjava.netcache.ResultData;
4+
5+
import rx.Observable;
6+
import rx.schedulers.Schedulers;
7+
8+
/**
9+
* 先缓存,后网络
10+
* @version alafighting 2016-06
11+
*/
12+
public class CacheAndRemoteStrategy<T> extends BasicCacheStrategy<T> {
13+
14+
@Override
15+
public Observable<ResultData<T>> execute(String key, Observable source) {
16+
return Observable.concat(
17+
loadCache(key),
18+
loadRemote(key, source)
19+
).subscribeOn(Schedulers.io());
20+
}
21+
22+
}

library/src/main/java/com/im4j/kakacache/rxjava/netcache/strategy/FirstCacheStrategy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import rx.schedulers.Schedulers;
77

88
/**
9-
* 谁先响应,处理谁
9+
* 优先缓存
1010
* @version alafighting 2016-06
1111
*/
1212
public class FirstCacheStrategy<T> extends BasicCacheStrategy<T> {
@@ -16,7 +16,7 @@ public Observable<ResultData<T>> execute(String key, Observable source) {
1616
return Observable.concat(
1717
loadCache(key),
1818
loadRemote(key, source)
19-
).firstOrDefault(null, it -> ((ResultData<T>)it.data) != null).subscribeOn(Schedulers.io());
19+
).firstOrDefault(null, it -> ((ResultData<T>)it).data != null).subscribeOn(Schedulers.io());
2020
}
2121

2222
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.im4j.kakacache.rxjava.netcache.strategy;
2+
3+
import com.im4j.kakacache.rxjava.netcache.ResultData;
4+
5+
import rx.Observable;
6+
import rx.schedulers.Schedulers;
7+
8+
/**
9+
* 优先服务器
10+
* @version alafighting 2016-06
11+
*/
12+
public class FirstRemoteStrategy<T> extends BasicCacheStrategy<T> {
13+
14+
@Override
15+
public Observable<ResultData<T>> execute(String key, Observable source) {
16+
return Observable.concat(
17+
loadRemote(key, source),
18+
loadCache(key)
19+
).firstOrDefault(null, it -> ((ResultData<T>)it).data != null).subscribeOn(Schedulers.io());
20+
}
21+
22+
}

0 commit comments

Comments
 (0)