Android AppWidget-如何缓存我自己的类?

Android AppWidget-如何缓存我自己的类?,android,caching,android-appwidget,Android,Caching,Android Appwidget,我正在开发一个AppWidget,它检索并显示一个JSON url。我还使用TextView显示小部件上次更新的时间,该视图显示类似“上次更新:9.00am”的内容。请注意,这应该是相对时间,也就是说,我不想显示“上次更新:2015年8月27日上午9点”。如果小部件一天没有更新,它应该显示“上次更新:昨天” 存在internet连接时没有问题,但如果没有,我希望继续显示以前的结果并更新“上次更新的”TextView,即计算从现在到上次更新之间的相对时间字符串。如何缓存此信息 受此启发,我使用了一

我正在开发一个
AppWidget
,它检索并显示一个JSON url。我还使用
TextView
显示小部件上次更新的时间,该视图显示类似“上次更新:9.00am”的内容。请注意,这应该是相对时间,也就是说,我不想显示“上次更新:2015年8月27日上午9点”。如果小部件一天没有更新,它应该显示“上次更新:昨天”

存在internet连接时没有问题,但如果没有,我希望继续显示以前的结果并更新“上次更新的”
TextView
,即计算从现在到上次更新之间的相对时间字符串。如何缓存此信息

受此启发,我使用了一个定制的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;
    }
}
导入android.util.SparseArray;
公共类ClientCache
{
私有静态SparseArray缓存=新SparseArray();
私有客户端缓存(){}
公共静态无效更新(int-appWidgetId、ChannelFeedData cfd)
{
cache.put(appWidgetId,cfd);
}
公共静态ChannelFeedData获取(int-appWidgetId)
{
返回cache.get(appWidgetId);
}
公共静态无效删除(int-appWidget)
{
cache.remove(appWidget);
}
公共静态布尔值isCached(int-appWidget)
{
返回获取(appWidget)!=null;
}
}
My
ChannelFeedData
类包含一个在检索时存储的方法,但如果小部件同时死亡,则调用
isCached
返回
false


即使我的
AppWidget
不时被系统删除和恢复,我如何缓存我自己的类?

可能使用SharedReferences

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

您当前正在使用内存缓存。如果您不想在应用程序被终止时保留数据,则需要一个文件缓存,例如SQLite数据库。