SharedPreferences 存储List数据的问题

yyy000112 2016-06-20 10:48:10
用 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();
}
...全文
584 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
睡精灵 2016-07-02
  • 打赏
  • 举报
回复
引用 12 楼 yyy000112 的回复:
[quote=引用 1 楼 shuijinglingsos 的回复:] 你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);
类似这种Json数据,建议用sharedpreference还是SQLite存储比较好。 HeWeather data service 3.0": [ { "basic": { "city": "大连", "cnty": "中国", "id": "CN101070201", "lat": "38.944000", "lon": "121.576000", "update": { "loc": "2015-07-15 10:43", "utc": "2015-07-15 02:46:14" } }, "status": "ok", "aqi": { "city": { "aqi": "71", "co": "1", "no2": "75", "o3": "101", "pm10": "89", "pm25": "44", "qlty": "良", "so2": "27" } }, "alarms": [ { "level": "橙色", "stat": "预警中", "title": "辽宁省大连市气象台发布高温橙色预警", "txt": "大连市气象台2015年07月14日13时31分发布高温橙色预警信号:预计14日下午至傍晚,旅顺口区局部最高气温将达到37℃以上,请注意防范。 ", "type": "高温" } ], "now": { "cond": { "code": "100", "txt": "晴" }, "fl": "33", "hum": "28", "pcpn": "0", "pres": "1005", "tmp": "32", "vis": "10", "wind": { "deg": "350", "dir": "东北风", "sc": "4-5", "spd": "11" } }, "daily_forecast": [ { "date": "2015-07-15", "astro": { "sr": "04:40", "ss": "19:19" }, "cond": { "code_d": "100", "code_n": "101", "txt_d": "晴", "txt_n": "多云" }, "hum": "48", "pcpn": "0.0", "pop": "0", "pres": "1005", "tmp": { "max": "33", "min": "24" }, "vis": "10", "wind": { "deg": "192", "dir": "东南风", "sc": "4-5", "spd": "11" } }, { "date": "2015-07-16", "astro": { "sr": "04:40", "ss": "19:18" }, "cond": { "code_d": "104", "code_n": "104", "txt_d": "阴", "txt_n": "阴" }, "hum": "82", "pcpn": "2.7", "pop": "82", "pres": "1008", "tmp": { "max": "27", "min": "23" }, "vis": "10", "wind": { "deg": "116", "dir": "东南风", "sc": "4-5", "spd": "11" } }, { "date": "2015-07-17", "astro": { "sr": "04:41", "ss": "19:17" }, "cond": { "code_d": "101", "code_n": "100", "txt_d": "多云", "txt_n": "晴" }, "hum": "70", "pcpn": "0.1", "pop": "11", "pres": "1006", "tmp": { "max": "28", "min": "22" }, "vis": "10", "wind": { "deg": "172", "dir": "西风", "sc": "4-5", "spd": "11" } } ], "hourly_forecast": [ { "date": "2015-07-15 10:00", "hum": "51", "pop": "0", "pres": "1006", "tmp": "32", "wind": { "deg": "127", "dir": "东南风", "sc": "微风", "spd": "4" } }, { [/quote] 这个要看你怎么使用这些数据,如果你需要筛选的话,那最好是存储到sqlite,如果每次都是全部拿出来用的话sharedpreference比较方便,对于大量的数据,还是建议sqlite。
yyy000112 2016-07-01
  • 打赏
  • 举报
回复
引用 1 楼 shuijinglingsos 的回复:
你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);
类似这种Json数据,建议用sharedpreference还是SQLite存储比较好。 HeWeather data service 3.0": [ { "basic": { "city": "大连", "cnty": "中国", "id": "CN101070201", "lat": "38.944000", "lon": "121.576000", "update": { "loc": "2015-07-15 10:43", "utc": "2015-07-15 02:46:14" } }, "status": "ok", "aqi": { "city": { "aqi": "71", "co": "1", "no2": "75", "o3": "101", "pm10": "89", "pm25": "44", "qlty": "良", "so2": "27" } }, "alarms": [ { "level": "橙色", "stat": "预警中", "title": "辽宁省大连市气象台发布高温橙色预警", "txt": "大连市气象台2015年07月14日13时31分发布高温橙色预警信号:预计14日下午至傍晚,旅顺口区局部最高气温将达到37℃以上,请注意防范。 ", "type": "高温" } ], "now": { "cond": { "code": "100", "txt": "晴" }, "fl": "33", "hum": "28", "pcpn": "0", "pres": "1005", "tmp": "32", "vis": "10", "wind": { "deg": "350", "dir": "东北风", "sc": "4-5", "spd": "11" } }, "daily_forecast": [ { "date": "2015-07-15", "astro": { "sr": "04:40", "ss": "19:19" }, "cond": { "code_d": "100", "code_n": "101", "txt_d": "晴", "txt_n": "多云" }, "hum": "48", "pcpn": "0.0", "pop": "0", "pres": "1005", "tmp": { "max": "33", "min": "24" }, "vis": "10", "wind": { "deg": "192", "dir": "东南风", "sc": "4-5", "spd": "11" } }, { "date": "2015-07-16", "astro": { "sr": "04:40", "ss": "19:18" }, "cond": { "code_d": "104", "code_n": "104", "txt_d": "阴", "txt_n": "阴" }, "hum": "82", "pcpn": "2.7", "pop": "82", "pres": "1008", "tmp": { "max": "27", "min": "23" }, "vis": "10", "wind": { "deg": "116", "dir": "东南风", "sc": "4-5", "spd": "11" } }, { "date": "2015-07-17", "astro": { "sr": "04:41", "ss": "19:17" }, "cond": { "code_d": "101", "code_n": "100", "txt_d": "多云", "txt_n": "晴" }, "hum": "70", "pcpn": "0.1", "pop": "11", "pres": "1006", "tmp": { "max": "28", "min": "22" }, "vis": "10", "wind": { "deg": "172", "dir": "西风", "sc": "4-5", "spd": "11" } } ], "hourly_forecast": [ { "date": "2015-07-15 10:00", "hum": "51", "pop": "0", "pres": "1006", "tmp": "32", "wind": { "deg": "127", "dir": "东南风", "sc": "微风", "spd": "4" } }, { "date": "2015-07-15 13:00", "hum": "49", "pop": "0", "pres": "1005", "tmp": "34", "wind": { "deg": "179", "dir": "南风", "sc": "微风", "spd": "7" } }, { "date": "2015-07-15 16:00", "hum": "54", "pop": "0", "pres": "1005", "tmp": "31", "wind": { "deg": "216", "dir": "西南风", "sc": "微风", "spd": "6" } }, { "date": "2015-07-15 19:00", "hum": "62", "pop": "0", "pres": "1005", "tmp": "29", "wind": { "deg": "192", "dir": "西南风", "sc": "微风", "spd": "4" } }, { "date": "2015-07-15 22:00", "hum": "62", "pop": "0", "pres": "1006", "tmp": "26", "wind": { "deg": "154", "dir": "东南风", "sc": "微风", "spd": "10" } } ], "suggestion": { "comf": { "brf": "较舒适", "txt": "白天天气晴好,您在这种天气条件下,会感觉早晚凉爽、舒适,午后偏热。" }, "cw": { "brf": "较不宜", "txt": "较不宜洗车,未来一天无雨,风力较大,如果执意擦洗汽车,要做好蒙上污垢的心理准备。" }, "drsg": { "brf": "炎热", "txt": "天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。" }, "flu": { "brf": "少发", "txt": "各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。" }, "sport": { "brf": "较适宜", "txt": "天气较好,但风力较大,推荐您进行室内运动,若在户外运动请注意防风。" }, "trav": { "brf": "适宜", "txt": "天气较好,是个好天气哦。稍热但是风大,能缓解炎热的感觉,适宜旅游,可不要错过机会呦!" }, "uv": { "brf": "强", "txt": "紫外线辐射强,建议涂擦SPF20左右、PA++的防晒护肤品。避免在10点至14点暴露于日光下。" } } } ]
开发者_android 2016-06-28
  • 打赏
  • 举报
回复
个人觉得,可以直接把list通过流的形式转换成字符串,然后保存到sp中,读取时,再以流的形式读取objcet,直接强转成list. 保存: ByteArrayOutputStream baos = new ByteArrayOutputStream(3000); ObjectOutputStream oos=null; oos = new ObjectOutputStream(baos); oos.writeObject(List); String newWord = new String(Base64.encodeBase64(baos.toByteArray())); 读取: byte[] base64Bytes = Base64.decodeBase64(wordBase64 .getBytes()); ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes); ObjectInputStream ois; ois = new ObjectInputStream(bais); List<?,?> result = (List<?,?>) ois.readObject(); 这种形式,我在项目中使用过,可用。
yyy000112 2016-06-27
  • 打赏
  • 举报
回复
引用 9 楼 jklwan 的回复:
[quote=引用 8 楼 yyy000112 的回复:] 能否写个小示例让我参考一下呀
你的代码不是有WeatherInfo wIf = gson.fromJson(s, WeatherInfo.class);这一句吗,直接保存s就行了[/quote] 转成list也是只能一次性取出来吗,,
jklwan 2016-06-23
  • 打赏
  • 举报
回复
引用 8 楼 yyy000112 的回复:
能否写个小示例让我参考一下呀
你的代码不是有WeatherInfo wIf = gson.fromJson(s, WeatherInfo.class);这一句吗,直接保存s就行了
睡精灵 2016-06-22
  • 打赏
  • 举报
回复
引用 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设定成多少数值,都只能打印出最后一个数据,也就是第七个[/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设定成多少数值,都只能打印出最后一个数据,也就是第七个[/quote] 当然要放到循环里面了,放循环后面就是一条。[/quote] 要是把json存储到SharedPreferences 里面该怎么写,提取时可以很方便的把每个数据都提出来吗[/quote] 就是把整个数据转成json字符串存储,取的时候也只能一起取出来,不能一个一个取。如果数据量大的话建议用sqlite。
yyy000112 2016-06-22
  • 打赏
  • 举报
回复
引用 7 楼 jklwan 的回复:
直接存json字符串,取的时候转成list就行了。
能否写个小示例让我参考一下呀
jklwan 2016-06-22
  • 打赏
  • 举报
回复
直接存json字符串,取的时候转成list就行了。
睡精灵 2016-06-21
  • 打赏
  • 举报
回复
引用 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设定成多少数值,都只能打印出最后一个数据,也就是第七个[/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设定成多少数值,都只能打印出最后一个数据,也就是第七个[/quote] 当然要放到循环里面了,放循环后面就是一条。
yyy000112 2016-06-21
  • 打赏
  • 举报
回复
引用 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设定成多少数值,都只能打印出最后一个数据,也就是第七个[/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设定成多少数值,都只能打印出最后一个数据,也就是第七个[/quote] 当然要放到循环里面了,放循环后面就是一条。[/quote] 要是把json存储到SharedPreferences 里面该怎么写,提取时可以很方便的把每个数据都提出来吗
yyy000112 2016-06-20
  • 打赏
  • 举报
回复
引用 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设定成多少数值,都只能打印出最后一个数据,也就是第七个
yyy000112 2016-06-20
  • 打赏
  • 举报
回复
引用 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); }
睡精灵 2016-06-20
  • 打赏
  • 举报
回复
你这样往里面存储数据是不行的,最终保存的数据只有最后一条。你可以直接把json字符串保存进去,然后在读取,也可以使用索引,但是你的put的时候key要加上索引,比如:editor.putString("date_daily_"+i, date);
Android学习文档 1 一、Android前言 3 1、Android发展历程 3 2、Android发展前景 8 3、Android 应用领域 9 二、准备工作 11 1、 Android开发环境搭建 11 1.1 第一种搭建Android的开发环境步骤: 12 1.2 第二种搭建Android的开发环境步骤: 12 2、AVD设备(模拟器) 13 3、Android的模拟器Emulator 14 4、DDMS调试 14 5、Android开发需知 14 5.1 Android目录结构 14 5.2 UI控件: 15 5.3 应用程序权限 15 6、第一个android应用程序 15 7、Android组件介绍 20 三、Android应用程序架构分析 21 1、Android布局组件介绍及其实例分析 21 2.1 布局组件概述 21 2.1.1 五大布局: 21 2.1.2 属性: 21 2.1.3 常用的长度单位解析: 21 2.2 线性布局 22 2.3 表格布局 22 2.4 相对布局 23 2.5 基本界面组件 23 2、Activity生命周期及其实例分析 24 1.1 Avtivity介绍 24 1.2 Activity的生命周期 25 1.2.1 Activity的三种状态 25 1.2.2 Activity在三种状态切换时调用的方法(7种) 25 1.2.3 Activity跳转与布局管理器 27 1.2.4 Activity中与跳转相关的方法 28 1.2.5 Activity的内部切换界面 28 1.2.6 Activity的用法 28 1.3 Avtivity的回调机制 28 四、事件处理机制 29 1、事件效果 29 2、事件监听器的处理模型 30 3、监听器的事件处理模型步骤 31 4、事件监听器必须实现事件监听器接口 31 5、实现事件监听器 31 6、基于回调的事件处理 32 7、基于回调的事件传播 32 五、 Android数据存储 32 1、android的数据存储 32 2、如何在android中使用SQlite数据库? 33 2.1 使用SharedPreferences 33 2.2 练习使用SharedPreferences 33 3、要读写其他应用的SharedPreferences怎么做? 33 六、 Json数据格式解析和xml解析 34 1、JSON简介 34 2、Gson介绍 34 3、JSON与XML 34 4、Android中对xml的解析 35 4.1 学习json数据格式,编写xml文件转化成实体bean的工具类 35 1.先写一个工具类,把list集合转化成xml格式,注意支持各种类型 35 分析:用dom4j来操作 35 2.涉及的知识 35 五、开发中会用到的技术 36 1、Selector技术 36 2、Tosat显示消息提示框技术 36 3、Handler消息传递机制 36 4、Handler类的主要作用 37 六、Android实例 38 1、做多米播放器的特效 38 2、做时钟的特效 39 1. 涉及的知识 40 一、完成”时钟”应用程序的操作 43 七、图形与图像处理 44

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧