Android 基于日历中的天数存储多个SharedReference

Android 基于日历中的天数存储多个SharedReference,android,service,sharedpreferences,Android,Service,Sharedpreferences,嗨,我想储存和检索每天的温度读数。我对安卓相当陌生,为此我使用了一项服务。首先,我检查是否有任何以前存储的共享首选项并加载它们。片段如下所示: public void onCreate() { Log.i(TAG, "Service onCreate"); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); if(prefs.contains(

嗨,我想储存和检索每天的温度读数。我对安卓相当陌生,为此我使用了一项服务。首先,我检查是否有任何以前存储的共享首选项并加载它们。片段如下所示:

public void onCreate() {
        Log.i(TAG, "Service onCreate");
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        if(prefs.contains("old_data")){
            SharedPreferences prefs2 = PreferenceManager.getDefaultSharedPreferences(this);
            String json = prefs2.getString("old_data","");
            TypeToken<ArrayList<Float>> token = new TypeToken<ArrayList<Float>>() {};
            ArrayList<Float> oldValues = new Gson().fromJson(json,token.getType());
            LineChartActivity.PlaceholderFragment.generateValues(oldValues) ;}


             isRunning = true;
    }
上述代码存储温度读数,随后加载先前存储的读数并覆盖新读数


我想分别存储每天的温度读数(我附带了一个日历)。因此,我正在寻找一种合适的方法继续进行。非常感谢您提供的任何帮助。

如果您真的想为此使用SharedReferences,而不想使用数据库

你可以这样做

String todayDate;
prefs.edit().putString(todayDate+"old_data",json).commit();

每次json返回数据且todayDate将更改时,您的温度读数将分别存储每天的数据。

您可以将
StringSet
写入SharedReferences。(仅适用于蜂窝上面的android版本)

将使
SharedReference
类的使用更简单

用法示例:

// putStringSet is supported only for android versions above HONEYCOMB
SharedPreferencesHelper sph; 
sph = new SharedPreferencesHelper(this); //this will use default shared preferences
Set name = new HashSet();
name.add("Viral");
name.add("Patel");
sph.putStringSet("name", name)

SharedReferences是唯一的键值。因此,您将一直覆盖内容。您需要的很可能是一个数据库:您可以将日期和温度一起存储在表中@NicolasSimon。您可以做的是按日期和其他数据设置SharedReferences中条目的键,例如20160418_old、20160418_current、20160418_new等,这可能会非常复杂。我尽量避免使用数据库,因为即使加载了大量数据,SharedReferences的工作速度也要快得多。SharedReferences将作为键值工作。因此,您需要将用于SharedRef的每个密钥存储在其他地方。你将把它们存储在哪里?@NicolasSimon不,你不需要,你可以开发一个逻辑(这是编码的本质),在这种情况下,例如[date]\u[string]\u[NumberRorString]\u等,并始终按照该逻辑获取数据。它将占用更少的存储空间,并且工作速度更快。SharedPref将作为关键值工作。因此,您需要将用于SharedRef的每个密钥存储在其他地方。你将把它们存储在哪里?@NicolasSimon正如我所说,你不需要存储任何东西,只要你使用常识和逻辑(这是编码的本质),在这种情况下,例如[date]\u[string]\u[NumberRorString]\u等,并且总是按照这种逻辑获取数据。它将占用更少的存储空间,而且运行速度更快。@NicolasSimon……正如您所说的“SharedPref将作为关键值运行”。因此,在本例中,所有值都将以键值格式保存,为了存储vaule,android创建了一个xml文件,其中所有值都以键值格式保存。
// putStringSet is supported only for android versions above HONEYCOMB
SharedPreferencesHelper sph; 
sph = new SharedPreferencesHelper(this); //this will use default shared preferences
Set name = new HashSet();
name.add("Viral");
name.add("Patel");
sph.putStringSet("name", name)