package com.hunterliy.library.cache; import android.util.Log; import com.google.gson.Gson; import com.hunterliy.library.bean.JsonBean; import com.hunterliy.library.utils.FileUtils; import rx.Observable; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class DiskCache implements ICache{ private String CACHE_PATH; public DiskCache() { CACHE_PATH = FileUtils.getCacheDir(); } @Override public <T extends JsonBean> Observable<T> get(final String key, final Class<T> clz) { return Observable.create(new Observable.OnSubscribe<T>() { @Override public void call(Subscriber<? super T> subscriber) { Log.e("cache","硬盘读取load cache from"+key); String fileName = CACHE_PATH+key; String result = FileUtils.readTextFromFile(fileName); if (subscriber.isUnsubscribed()){ return; } if (result == null){ subscriber.onNext(null); }else { T t = new Gson().fromJson(result,clz); subscriber.onNext(t); } subscriber.onCompleted(); } }) .observeOn(Schedulers.io()) .subscribeOn(AndroidSchedulers.mainThread()); } @Override public <T extends JsonBean> void put(final String key, final T t) { Observable.create(new Observable.OnSubscribe<Object>() { @Override public void call(Subscriber<? super Object> subscriber) { Log.e("cache","硬盘存储save to disk"+key); String fileName = CACHE_PATH + key; String result = t.toString(); FileUtils.saveText2SDcard(fileName,result); if (!subscriber.isUnsubscribed()){ subscriber.onNext(t); subscriber.onCompleted(); } } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(); } }