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)
);