我正在设计一个应用程序,它涉及解析大型XML并保持整个应用程序中的序列化数据可访问。我打算有一个数据对象,它将保存数据,每个组件(尽管不是每个组件)都可以访问数据。
我希望这些数据是非持久的,应用程序解析XML并将数据保存在内存中。请注意,此数据将很大(XML文件大于2MB)。此外,当用户切换到另一个应用程序时,我希望数据存在。
我已经研究过可能的解决方案,例如:
我不想进入Singletons与扩展应用程序等无穷无尽的争论,但我也希望进行单元测试,我听说Singletons和静态对象很难测试。
有人可以对此有所了解吗?最优雅的方式是什么?
编辑:数据是否应该持久?使其持久化意味着理论上将是XML的一个解析,将其序列化,将数据存储在数据库中并且可以使用对象来从组件访问该数据。这听起来怎么样?
编辑2:我认为在整个应用程序中保持数据可访问的方式是使用将存储数据的SQLite数据库。
使用XML文件,我将使用创建的SQLiteOpenHelper子类解析数据并在首次启动时将其放入数据库中。当需要数据时,我将使用读访问权使用子类对数据库进行查询。每个组件(Activity / Service / etc.)都有自己的SQLiteOpenHelper实例来对数据库进行查询,从而可以访问数据。这听起来怎么样?
答案 0 :(得分:1)
如果没有更多细节,很难给出答案。但我推荐这些链接:
答案 1 :(得分:0)
考虑到您的所有顾虑,我会使用Shared Preferences来实现您的目标。这是我的应用程序中的示例代码:
为简单起见而修改:
private static final String PREF_NAME = "MyPrefs"; //Any value would do
private static final String PREFS_LOGIN_USER= "user"; //Any value would do
private static final String PREFS_LOGIN_PASSWORD= "password"; //Any value would do
public void onCreate(Bundle bundle){
super.onCreate(savedInstanceState);
....
//Create a preference file
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
//Put values
SharedPreferences.Editor editor = settings.edit();
editor.putString(PREFS_LOGIN_USER, "admin");
editor.putString(PREFS_LOGIN_PASSWORD, "P@$$w0rd");
editor.commit();
//Get values
String userName = settings.getString(PREFS_LOGIN_USER, null);
String password = settings.getString(PREFS_LOGIN_PASSWORD, null);
}
即使应用已关闭,这些值仍会保留。
顺便说一下,如果要删除值,也可以使用editor.remove(PREFS_LOGIN_USER)
。也请致电editor.commit();
以保留更改。
答案 2 :(得分:0)
我认为我要在整个应用程序中保持数据可访问的方式是使用将存储数据的SQLite数据库。
使用XML文件,我将使用创建的SQLiteOpenHelper子类解析数据并在首次启动时将其放入数据库中。当需要数据时,我将使用读访问权使用子类对数据库进行查询。每个组件(Activity / Service / etc.)都有自己的SQLiteOpenHelper实例来对数据库进行查询。