0

我正在设计一个涉及解析大型 XML 并保持序列化数据在整个应用程序中可访问的应用程序。我打算有一个数据对象来保存数据,并且每个组件(尽管不是每个组件)都可以访问数据。

我希望这些数据是非持久的,从而应用程序解析 XML 并将数据保存在内存中。请注意,此数据会很大(XML 文件大于 2MB)。另外,当用户切换到另一个应用程序时,我希望数据在那里。

我研究了可能的解决方案,例如:

  • 静态对象
  • 单身人士
  • 扩展应用
  • 使用服务
  • 使用 SQLite 数据库(我不想这样做)

我不想陷入单例与扩展应用程序等无休止的争论,但我也想做单元测试,而且我听说单例和静态对象很难测试。

任何人都可以对此有所了解吗?最优雅的方法是什么?

编辑:数据是否应该持久化?使其持久化意味着,理论上,将对 XML 进行一次解析,将其序列化,将数据存储在数据库中,并且可以使用对象从组件访问该数据。听起来怎么样?

编辑 2:我认为我要在整个应用程序中保持数据可访问的方式是使用一个 SQLite 数据库来存储数据。

使用 XML 文件,我将解析数据并在首次启动时使用 SQLiteOpenHelper 创建的子类将其放入数据库。当需要数据时,我将使用读取访问权限使用子类对数据库进行查询。每个组件(活动/服务/等)都有自己的 SQLiteOpenHelper 实例来查询数据库,从而可以访问数据。这听起来如何?

4

3 回答 3

1

没有更多细节很难给出答案。但我推荐这些链接:

于 2012-08-13T08:50:28.893 回答
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();坚持改变。

于 2012-08-13T09:08:30.683 回答
0

我认为我要在整个应用程序中保持数据可访问的方式是使用一个 SQLite 数据库来存储数据。

使用 XML 文件,我将解析数据并在首次启动时使用 SQLiteOpenHelper 创建的子类将其放入数据库。当需要数据时,我将使用读取访问权限使用子类对数据库进行查询。每个组件(活动/服务/等)都有自己的 SQLiteOpenHelper 实例来查询数据库。

于 2012-08-14T11:11:12.073 回答