将ArrayList <object>存储为JSON SharedPreference或SQLite数据库表?</object>

时间:2012-07-11 10:50:10

标签: android json sqlite sharedpreferences

方案: 我将用户位置(对象位置:lat,long和准确性字段)从服务中的线程发送到Web服务。如果它由于各种问题(如没有网络)而失败,我需要存储它并尝试下次发送它。如果多次失败,则存储多个Location对象。

我有两个选择:

  1. 使用SQLite数据库和SQLiteOpenHelper,在每个线程打开时,从表中检索记录,关闭。成功发送后,清除表格内容。

  2. 使用SharedPreferences,同时将位置对象存储为使用GSON解析为JSON的ArrayList(如果有很多)。需要时再次解析为ArrayList。

  3. 我知道SharedPreferences没有大小限制,根据我的条件我可能有100行(这是夸张但可能)。我主要担心的是SQlite经常打开和关闭,事情可能会搞砸并最终生效。 SharedPreferences不会干扰任何事情,但我想我可能会在保存/解析这样的长列表时遇到糟糕的表现。我知道SharedPreferences不是为此而做的,但我想听听你的意见。

1 个答案:

答案 0 :(得分:1)

如果您担心打开和关闭数据库的sqlite抛出异常,您可以单独将值放在SharedPreference中,然后使用

迭代SharedPreferences的所有值
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
     Log.d("map values",entry.getKey() + ": 
                                  "+ entry.getValue().toString());            
 }