CacheBank is rx based android memory-disk cache library
supporting mem/disk cache
now support
- RxJava
- Mem LRUCache
will support...
- Disk Cache(Dual mode)
- Cache Option
You must initialize the Bank before using it.
new Bank.Builder().init();or you canspecify values...
new Bank.Builder() .setMemCacheSize(100) .setDiskCacheSize(100) .init();class CarModel { public int index; public String carName; }You can store the data using the deposit() function.
void networkResponseCallback(String carId, CarModel carModel){ Bank.deposit(carId, carModel).now(); }The deposit() function returns Cacheable object.
Cacheable object has 3 functions. now, rx, subscribe.
If you want to call a function synchronously, you can use now.
Or if you want to call a function asynchronously, you can use rx or subscribe like below.
void networkResponseCallback(String carId, CarModel carModel){ Observable putObservable = Bank.deposit(carId, carModel).rx(); putObservable.subscribe(__ -> Logger.i("saved!")); } //or more simply void networkResponseCallbackSimply(String carId, CarModel carModel){ Bank.deposit(carId, carModel).subscribe(__ -> Logger.i("saved!")); }You can load the data as your setting it at initialization. (cachetime, cachemode... etc)
void setItemLayout(String carId){ CarModel carModel = Bank.withdraw(carId, CarModel.class).now(); textView.setText(carModel.carName); ... }Like the 'deposit' function, the 'withdrawal' function also returns Cacheable. Equally, it has three functions. now, rx, subscribe Async functions return the cached data or nothing.
void setItemLayout(String carId){ Observable<CarModel> carObservable = Bank.withdraw(carId, CarModel.class).rx(); carObservable.subscribe(carModel -> { textView.setText(carModel.carName); } ); ... } //or more simply void setItemLayoutSimply(String carId){ Bank.withdraw(carId, CarModel.class) .subscribe(carModel -> { textView.setText(carModel.carName); } ); }You can specify cache mode in initialize.
new Bank.Builder() .setMemCacheSize(100) .setDiskCacheSize(100) .setCacheMode(CacheMode.MEMORY_ONLY) .init();There are 3 options. MEMORY_ONLY, DISK_ONLY, ALL
For a more clear code pattern, it support DataSource.
If DataSource is defined, data is automatically updated from the DataSource only when there is no cache data.
Like this.
// DataSource<KeyType, DataType> public class CarDataSource implements DataSource<String, CarModel> { @Override public void fetchData(String key, DataEmitter<CarModel> emitter) { DummyNetwork.requestCar(key).subscribe( carModel -> { emitter.emit(carModel); } ); } }And set datasource when you use withdrawal function.
CarModel carModel = Bank.withdrawal(CarModell.class, "sonata") .dataSource(new CarDataSource()).now(); textView.setText(carModel.carName);Request new data from datasource only if there is no cached data.
Of course, you can use it with rxJava.(I recommend it)
CarModel carModel = Bank.withdrawal(CarModell.class, "sonata") .dataSource(new CarDataSource()) .rx() .subscribe( carModel -> textView.setText(carModel.carName) );