在这种情况下,用户可以清除共享首选项而不是DB

时间:2016-06-03 17:12:51

标签: android sqlite sharedpreferences android-memory android-database

据我所知,当用户做"清除数据"或"禁用"任何应用程序,它的共享首选项都被清除,数据库也被清除。

所以我的问题是,

是否存在该用户可以执行的情况,其中共享首选项被清除但数据库保持不变?

4 个答案:

答案 0 :(得分:3)

清除数据意味着用户希望清除与app(sharedpref,cache,db)相关的完整数据。如果您希望某些数据保持完整,即使用户点击"清除数据",请保留在设备存储中。

答案 1 :(得分:1)

清除数据将清除所有内容,共享首选项,缓存,数据库。

如果您确实只想清除共享首选项(部分/全部),可以通过迭代共享首选项来以编程方式执行此操作:

Map<String, ?> allEntries = prefA.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
    Log.i("debug", entry.getKey() + ": " +  entry.getValue().toString());
    //put delete/edit logic here for some shared preference
} 

可以根据您的应用版本或其他逻辑(例如用户注销时)放置此逻辑,但此操作仅在您的应用中执行。

我不认为Android应用程序设置允许您只能清除共享首选项而不是本地数据库的任何选项。

答案 2 :(得分:0)

您无法在共享首选项中保存对象的ArrayList。

来自Android文档:https://developer.android.com/guide/topics/data/data-storage.html#pref

  

SharedPreferences类提供了允许的通用框架   您要保存并检索原语的持久键值对   数据类型。您可以使用SharedPreferences保存任何基元   数据:布尔值,浮点数,整数,长整数和字符串。此数据将   持续跨用户会话(即使你的应用程序被杀死)。

最简单的解决方案是在对象中实现serializable并将其保存在内部存储中。

https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

答案 3 :(得分:0)

可以选择将数据库放入apk directly。当然,如果您在案例中使用已经完成的数据库