2015-08-27 19 views
0

我正在致力於檢索JSON網址並顯示它的AppWidget。我還會顯示小部件上次更新時的TextView,顯示「最近更新時間:9.00am」。請注意,這應該是相對的時間,也就是說,我不想顯示「最近更新:27/8/2015 9.00am」。如果小部件沒有更新一天,它應該顯示「上次更新:昨天」。Android AppWidget - 如何緩存我自己的類?

當互聯網連接存在時沒有問題,但當它不是我想繼續顯示以前的結果並更新「最近更新」TextView,即計算現在和上次更新時間之間的相對時間字符串。我如何緩存這些信息?

通過this widget的啓發,我使用的是自定義的ClientCache.java類

import android.util.SparseArray; 

public class ClientCache 
{ 
    private static SparseArray<ChannelFeedData> cache = new SparseArray<ChannelFeedData>(); 

    private ClientCache() {} 

    public static void update(int appWidgetId, ChannelFeedData cfd) 
    { 
     cache.put(appWidgetId, cfd); 
    } 

    public static ChannelFeedData fetch(int appWidgetId) 
    { 
     return cache.get(appWidgetId); 
    } 

    public static void remove(int appWidget) 
    { 
     cache.remove(appWidget); 
    } 

    public static boolean isCached(int appWidget) 
    { 
     return fetch(appWidget) != null; 
    } 
} 

ChannelFeedData類包括商店,當它被檢索的方法,但調用isCached回報false如果小部件在已死亡與此同時。

我如何緩存我自己的類,即使我的AppWidget由系統死亡,從時間恢復時間?

+0

您當前使用的內存緩存。如果你不想在你的應用程序被殺時保留你的數據,你將需要一個文件緩存,比如SQLite數據庫。 – nhaarman

回答

1

也許使用SharedPreferences

SharedPreferences pref = context.getSharedPreferences("pref_name", Context.MODE_PRIVATE); 
     pref.edit().putString("update_key", "data to be saved"); //save data 
     pref.edit().commit(); 

     String s = pref.getString("update_key", "empty");  //get data