1 相关依赖:
compile "com.github.VictorAlbertos.RxCache:runtime:1.8.3-2.x"
compile "io.reactivex.rxjava2:rxjava:2.1.6"
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
compile 'com.github.VictorAlbertos.Jolyglot:gson:0.0.3'
2 具体代码
调用类
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final UserInfo user = new UserInfo("JACK","000001");
// Observable observable = Observable.create(new ObservableOnSubscribe<UserInfo>() {
// @Override
// public void subscribe(ObservableEmitter<UserInfo> e) throws Exception {
// e.onNext(user);
// }
// });
Observable<UserInfo> observable = Observable.just(user);
App app = (App) getApplication();
app.getUserCacheProviders()
.getUser(observable,new DynamicKey(user.getUserid()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(user1 -> textView.setText(user1.toString()));
}
});
public interface Providers {
@LifeCache(duration = 10, timeUnit = TimeUnit.SECONDS)
Observable<UserInfo> getUser(Observable<UserInfo> user, DynamicKey dynamicKey);
}
public class UserInfo {
private String name;
private String userid;
public String sjbh;
public UserInfo(String name, String userid) {
this.name = name;
this.userid = userid;
sjbh = UUID.randomUUID().toString();
}
每十秒钟 显示的user uuid都是不一样的
DynamicKey存储有一个Key,DynamicKey的应用场景: 请求同一个接口,需要参照一个变量的不同返回不同的数据,比如分页,构造时传入页数就可以了
DynamicKeyGroup存储有两个key,DynamicKeyGroup是在DynamicKey基础上的加强版 例如:
DynamicKeyGroup dynamicKeyGroup = new DynamicKeyGroup(category, page);
EvictDynamicKeyGroup 只会删除对应分页下,对应用户的缓存
EvictDynamicKey 会删除那个分页下的所有缓存,比如你请求的是第一页下user1的数据,它不仅会删除user1的数据还会删除当前分页下其他user2,user3...的数据
EvictProvider 会删除当前接口下的所有缓存,比如你请求的是第一页的数据,它不仅会删除第一页的数据,还会把这个接口下其他分页的数据全删除