2012-08-13 54 views
0

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

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

我已经调查可能的解决方案,如:

  • 静态对象
  • 单身
  • 推广应用
  • 使用服务
  • 使用SQLite数据库(我不想要做到这一点)

我不想ge t对Singletons与扩展Application的无尽争论等,但我也想做单元测试,我听说Singletons和静态对象很难测试。

任何人都可以对此有所了解吗?什么是最优雅的方式来做到这一点?

编辑:数据应该持久还是不?将其持久化意味着理论上可以是XML的一个解析,将其串行化,将数据存储在数据库中,并可以使用对象从组件访问数据。听上去怎么样?

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

使用XML文件,我将解析数据并在首次启动时使用创建的SQLiteOpenHelper子类将其放入数据库中。当需要数据时,我将使用读访问使用子类对数据库进行查询。每个组件(Activity/Service/etc)都有它自己的SQLiteOpenHelper实例来查询数据库并因此可以访问数据。这听起来怎么样?

+1

对于相对较小的原始数据,我会考虑SharedPreferences。 – 2012-08-13 08:42:04

+0

这可以适用于小数据,但处理的数据很大 – 2012-08-13 09:08:16

回答

0

我想我将保持整个应用程序可访问的数据的方式是使用SQLite数据库来存储数据。

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

1
+0

谢谢,我想过通过活动传递数据,但这可能会变得混乱。我也看了一下Android Framework的常见问题,但是我发现Singleton和静态数据并不好。我认为让数据成为中心是有意义的。 – 2012-08-13 09:11:24

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, "[email protected]$$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();坚持改变。

+0

问题是XML文件很大,因此必须为每个XML创建许多共享首选项。此外,数据是许多数据对象的列表。 – 2012-08-13 09:16:42

+0

将大量数据保存在内存中不是一个好习惯。如果您不希望用户修改它,您会希望将数据保存在/data/user/com.android.yourpackage /目录中。这样,你的应用程序使用最少的内存,数据可以随时访问。随着序列化问题,我已经使用[Xstream for android](http://jars.de/java/android-xml-serialization-with-xstream)将xml序列化为对象,反之亦然。希望这可以帮助! – PinoyCoder 2012-08-13 09:36:42

相关问题