方案: 我将用户位置(对象位置:lat,long和准确性字段)从服务中的线程发送到Web服务。如果它由于各种问题(如没有网络)而失败,我需要存储它并尝试下次发送它。如果多次失败,则存储多个Location对象。
我有两个选择:
使用SQLite数据库和SQLiteOpenHelper,在每个线程打开时,从表中检索记录,关闭。成功发送后,清除表格内容。
使用SharedPreferences,同时将位置对象存储为使用GSON解析为JSON的ArrayList(如果有很多)。需要时再次解析为ArrayList。
我知道SharedPreferences没有大小限制,根据我的条件我可能有100行(这是夸张但可能)。我主要担心的是SQlite经常打开和关闭,事情可能会搞砸并最终生效。 SharedPreferences不会干扰任何事情,但我想我可能会在保存/解析这样的长列表时遇到糟糕的表现。我知道SharedPreferences不是为此而做的,但我想听听你的意见。
答案 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());
}