1、在實際開發中須要固定時間去請求更新下菜單數據,邏輯以下java
int chcheTime= 60 * 60;//定義緩存時間 String lastRefreshTime = 這裏取出SharedPreferences存儲的時間 String currTime = TimeUtil.getCurTimeStr(); long diff=0; if (lastRefreshTime!=null) { diff = TimeUtil.calDateDifferent(lastRefreshTime, currTime); } //取到本地數據集 List<ArticleType> localList = db.getArticleTypeList(); // 緩存超過有效時間,則從新請求數據 if (NetUtil.isNetworkAvailable(getActivity())&&(diff > chcheTime || localList == null ||localList.size() == 0|| sync)) { //這裏請求接口數據,請求成功後須要將時間存到SharedPreferences裏頭 } else { //這裏填充本地數據,可能取數據庫數據 }
2、若是請求接口數據成功數據庫
SharedPreferences 保存當前時間 TimeUtil.getCurTimeStr()緩存
3、如下是TimeUtilide
public class TimeUtil { /** * 格式:年-月-日 小時:分鐘:秒 */ public static final String FORMAT_ONE = "yyyy-MM-dd HH:mm:ss"; /** * 默認formater yyyy-MM-dd HH:mm:ss */ public static final SimpleDateFormat TIMEFORMAT = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.getDefault()); private final static ThreadLocal<SimpleDateFormat> dateFormater = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat(FORMAT_ONE); } }; /*** * 計算兩個時間差,返回的是的秒s * * @author qxian 2016-5-25下午23:50:06 * * @return long * @param dete1 * @param date2 * @return */ public static long calDateDifferent(String dete1, String date2) { long diff = 0; Date d1 = null; Date d2 = null; try { d1 = dateFormater.get().parse(dete1); d2 = dateFormater.get().parse(date2); // 毫秒ms diff = d2.getTime() - d1.getTime(); } catch (Exception e) { e.printStackTrace(); } return diff / 1000; } public static String getCurTimeStr() { Calendar cal = Calendar.getInstance(); String curDate = dateFormater.get().format(cal.getTime()); return curDate; } }