技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 移动开发 > android > 正文

SharedPreferences 存储List数据的问题

来源: 技术CTO 阅读:

 用  SharedPreferences 存储以下list数据后,例如从SharedPreferences 提取时date时只能显示一个数据,要想显示指定的,必须把i设置成具体的数才行
请教这段代码里面的被存储变量怎么样才能在SharedPreferences 中遍历出来


WeatherInfo wIf = gson.fromJson(s, WeatherInfo.class);
                        List<DailyForecast> dailyForecasts = wIf.getDaily_forecast();
                        
                        for (int i = 0; i < 7; i++) {
                            DailyForecast dailyForecast = dailyForecasts.get(i);
                            String date = dailyForecasts.get(i).getDate();
                            Astro astro = dailyForecasts.get(i).getAstro();
                            String sr = astro.getSr();
                            String ss = astro.getSs();
                            Cond cond = dailyForecasts.get(i).getCond();
                            int cond_code = cond.getCode();
                            String cond_txt = cond.getTxt();
                            int cond_code_d = cond.getCode_d();
                            int cond_code_n = cond.getCode_n();
                            String cond_txt_d = cond.getTxt_d();
                            int hum_daily = dailyForecasts.get(i).getHum();
                            Tmp tmp_daily = dailyForecasts.get(i).getTmp();
                        
saveDailyForecast(MyApplication.getContext(), date, sr, ss, cond_code, cond_txt, cond_code_d, cond_code_n, cond_txt_d, hum_daily,tmp_daily);
                 }

public static void saveDailyForecast(Context context, String date, String sr, String ss, int cond_code,
                                         String cond_txt, int cond_code_d, int cond_code_n, String cond_txt_d,
                                         int hum_daily, Tmp tmp_daily) {
        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
        editor.putString("date_daily", date);
        editor.putString("astro_sr",sr);
        editor.putString("astro_ss",ss);
        editor.putInt("cond_code", cond_code);
        editor.putString("cond_txt", cond_txt);
        editor.putInt("cond_code_d", cond_code_d);
        editor.putInt("cond_code_n", cond_code_n);
        editor.putString("cond_txt_d", cond_txt_d);
        editor.putInt("hum_daly", hum_daily);
        editor.putInt("max_daily",tmp_daily.getMax());
        editor.putInt("min_daily",tmp_daily.getMin());
        editor.commit();
    }

你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);
引用 1 楼 shuijinglingsos 的回复:
你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);

editor.putString("date_daily_"+i, date); 这一段是不是要套一个循环
for(int I = 0; I<7;i++){
editor.putString("date_daily_"+i, date); 
}
引用 1 楼 shuijinglingsos 的回复:
你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);


我试了一下在 saveDailyForecast方法里加上这段for(int I = 0; I<7;i++){
 editor.putString("date_daily_"+i, date); 
 } 
for (int i = 0; i < 7; i++) {
                             DailyForecast dailyForecast = dailyForecasts.get(i);
                             String date = dailyForecasts.get(i).getDate();
                             Astro astro = dailyForecasts.get(i).getAstro();
                              .......
                              saveDailyForecast......
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MyApplication.getContext());        
                        Log.d("Test", sp.getString("date_daily" + i, ""));

这样子可以把每个date都打印出来
}
当把SharedPreferences sp 这段拿到循环外时,我不管把I设定成多少数值,都只能打印出最后一个数据,也就是第七个
引用 3 楼 yyy000112 的回复:
Quote: 引用 1 楼 shuijinglingsos 的回复:

你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);


我试了一下在 saveDailyForecast方法里加上这段for(int I = 0; I<7;i++){
 editor.putString("date_daily_"+i, date); 
 } 
for (int i = 0; i < 7; i++) {
                             DailyForecast dailyForecast = dailyForecasts.get(i);
                             String date = dailyForecasts.get(i).getDate();
                             Astro astro = dailyForecasts.get(i).getAstro();
                              .......
                              saveDailyForecast......
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MyApplication.getContext());        
                        Log.d("Test", sp.getString("date_daily" + i, ""));

这样子可以把每个date都打印出来
}
当把SharedPreferences sp 这段拿到循环外时,我不管把I设定成多少数值,都只能打印出最后一个数据,也就是第七个


引用 3 楼 yyy000112 的回复:
Quote: 引用 1 楼 shuijinglingsos 的回复:

你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);


我试了一下在 saveDailyForecast方法里加上这段for(int I = 0; I<7;i++){
 editor.putString("date_daily_"+i, date); 
 } 
for (int i = 0; i < 7; i++) {
                             DailyForecast dailyForecast = dailyForecasts.get(i);
                             String date = dailyForecasts.get(i).getDate();
                             Astro astro = dailyForecasts.get(i).getAstro();
                              .......
                              saveDailyForecast......
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MyApplication.getContext());        
                        Log.d("Test", sp.getString("date_daily" + i, ""));

这样子可以把每个date都打印出来
}
当把SharedPreferences sp 这段拿到循环外时,我不管把I设定成多少数值,都只能打印出最后一个数据,也就是第七个


当然要放到循环里面了,放循环后面就是一条。
引用 4 楼 shuijinglingsos 的回复:
Quote: 引用 3 楼 yyy000112 的回复:

Quote: 引用 1 楼 shuijinglingsos 的回复:

你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);


我试了一下在 saveDailyForecast方法里加上这段for(int I = 0; I<7;i++){
 editor.putString("date_daily_"+i, date); 
 } 
for (int i = 0; i < 7; i++) {
                             DailyForecast dailyForecast = dailyForecasts.get(i);
                             String date = dailyForecasts.get(i).getDate();
                             Astro astro = dailyForecasts.get(i).getAstro();
                              .......
                              saveDailyForecast......
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MyApplication.getContext());        
                        Log.d("Test", sp.getString("date_daily" + i, ""));

这样子可以把每个date都打印出来
}
当把SharedPreferences sp 这段拿到循环外时,我不管把I设定成多少数值,都只能打印出最后一个数据,也就是第七个


引用 3 楼 yyy000112 的回复:
Quote: 引用 1 楼 shuijinglingsos 的回复:

你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);


我试了一下在 saveDailyForecast方法里加上这段for(int I = 0; I<7;i++){
 editor.putString("date_daily_"+i, date); 
 } 
for (int i = 0; i < 7; i++) {
                             DailyForecast dailyForecast = dailyForecasts.get(i);
                             String date = dailyForecasts.get(i).getDate();
                             Astro astro = dailyForecasts.get(i).getAstro();
                              .......
                              saveDailyForecast......
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MyApplication.getContext());        
                        Log.d("Test", sp.getString("date_daily" + i, ""));

这样子可以把每个date都打印出来
}
当把SharedPreferences sp 这段拿到循环外时,我不管把I设定成多少数值,都只能打印出最后一个数据,也就是第七个


当然要放到循环里面了,放循环后面就是一条。

要是把json存储到SharedPreferences 里面该怎么写,提取时可以很方便的把每个数据都提出来吗
引用 5 楼 yyy000112 的回复:
Quote: 引用 4 楼 shuijinglingsos 的回复:

Quote: 引用 3 楼 yyy000112 的回复:

Quote: 引用 1 楼 shuijinglingsos 的回复:

你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);


我试了一下在 saveDailyForecast方法里加上这段for(int I = 0; I<7;i++){
 editor.putString("date_daily_"+i, date); 
 } 
for (int i = 0; i < 7; i++) {
                             DailyForecast dailyForecast = dailyForecasts.get(i);
                             String date = dailyForecasts.get(i).getDate();
                             Astro astro = dailyForecasts.get(i).getAstro();
                              .......
                              saveDailyForecast......
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MyApplication.getContext());        
                        Log.d("Test", sp.getString("date_daily" + i, ""));

这样子可以把每个date都打印出来
}
当把SharedPreferences sp 这段拿到循环外时,我不管把I设定成多少数值,都只能打印出最后一个数据,也就是第七个


引用 3 楼 yyy000112 的回复:
Quote: 引用 1 楼 shuijinglingsos 的回复:

你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);


我试了一下在 saveDailyForecast方法里加上这段for(int I = 0; I<7;i++){
 editor.putString("date_daily_"+i, date); 
 } 
for (int i = 0; i < 7; i++) {
                             DailyForecast dailyForecast = dailyForecasts.get(i);
                             String date = dailyForecasts.get(i).getDate();
                             Astro astro = dailyForecasts.get(i).getAstro();
                              .......
                              saveDailyForecast......
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MyApplication.getContext());        
                        Log.d("Test", sp.getString("date_daily" + i, ""));

这样子可以把每个date都打印出来
}
当把SharedPreferences sp 这段拿到循环外时,我不管把I设定成多少数值,都只能打印出最后一个数据,也就是第七个


当然要放到循环里面了,放循环后面就是一条。

要是把json存储到SharedPreferences 里面该怎么写,提取时可以很方便的把每个数据都提出来吗


就是把整个数据转成json字符串存储,取的时候也只能一起取出来,不能一个一个取。如果数据量大的话建议用sqlite。
直接存json字符串,取的时候转成list就行了。

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^