我设计的应用程序,它需要解析大型XML并保持整个应用程序访问的序列化的数据。 我打算有一个数据对象,这将保持所存储的数据和每个组件(尽管不是每个人)都可以访问该数据。
我想这个数据是不可持久的,从而使应用程序解析XML和保存在内存中的数据。 请注意,此数据将是大(XML文件> 2MB)。 另外,我想数据当用户切换到其他应用在那里。
我已研究过可能的解决方案,如:
- 静态对象
- 单身
- 扩展应用
- 使用服务
- 使用SQLite数据库(我不希望这样做)
我不想获得在单身无尽的争论与推广应用等,但我想这样做单元测试,以及和我听说单身和静态对象是很难测试。
任何人都可以阐明这一些轻? 什么是最优雅的方式来做到这一点?
编辑:如果该数据是持续性或不? 使它持续将意味着会,从理论上讲,是XML的一个解析,串行化它,在数据库中存储的数据,并可以使用一个对象从组件访问这些数据。 听起来怎么样?
编辑2:我想办法,我要保持数据的可访问整个应用程序是使用将存储数据的SQLite数据库。
使用XML文件,我将分析数据,并使用SQLiteOpenHelper的子类创建把它在数据库中的第一次启动。 当需要数据我会查询使用使用读访问子类中的数据库。 每个组件(活动/服务/等)将有自己的SQLiteOpenHelper的实例,以查询数据库,从而可以访问数据。 请问这个声音?
这是很难给出一个答案没有更多的细节。 但我建议这些链接:
- 我如何通过活动之间的数据在Android应用程序?
- 如何从一个Android的活动发送对象到另一个使用意图?
- http://developer.android.com/guide/faq/framework.html#3
考虑到所有的您的问题考虑在内,我会使用共享偏好来实现你想要的。 下面是我的应用程序的示例代码:
改性为简单起见:
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();
坚持变化。
我想办法,我要保持数据的可访问整个应用程序是使用将存储数据的SQLite数据库。
使用XML文件,我将分析数据,并使用SQLiteOpenHelper的子类创建把它在数据库中的第一次启动。 当需要数据我会查询使用使用读访问子类中的数据库。 每个组件(活动/服务/等)将有自己的SQLiteOpenHelper的实例,以查询数据库。