话说Android的数据存储一共提供了4种数据存储方式,但是由于存储的这些数据都是其应用程序私有的,所以如果需要在其他应用程序中使用这些数据的话,就要使用Android提供的Content Providers(数据共享)。
Android中4种数据存储方式如下:
-Shared Preferences:轻量级的键值存储机制,只可以存储基本数据类型。Shared Preferences主要是针对系统配置信息的保存,比如我们经常使用的情景模式设置,这会设置了静音,关机后在开机后,还是静音,改成标准的时候,关机或者跳出其他界面时,它依旧是标准,这就是Shared Preferences的功能。
-Files:和java中的文件差不多,也是要与流相关联吧。在Android中,文件是一个应用程序私有的,也就是说给应用程序是无法去读写其他的应用程序的文件。Files就是把需要保存的文件信息通过它的格式记录下来,下次需要的时候,通过读取此文件就可以获取了。我们知道,android采用了Linux核心,在此系统中,文件也是Linux的形式。
-SQLite:android中比较受欢迎的数据存储,因为它支持SQL语句。是一个开源的关系数据库,与普通关系数据库一样,也具有ACID的特性,可以用来存储大量的数据,并且能够很容易的对数据进行使用、维护、更新等基本操作。所以相对于操作,比上面2中来的比较的麻烦。
-NetWork:见名思意,网络,即网络存储,也可以这么认为吧,通过网络来获取和保存数据资源吧,前提是网络连接状态是否畅通。
我记得MySql配置后,会由一个ini文件,当然,不只是MySql有的,ini文件的作用就是用来保存应用程序的一些属性设置。这里的Shared Preferences就是和ini的作用差不多。举个例子来说下:通过上一次用户所做的修改或者自定义参数设置,当再次启动程序后依然保持原有的设置。通过getPreferences()方法获得Preferences对象,通过“SharedPreferences.Editor editor = state.edit();”取得编辑的对象,接着通过"editor.put...()"方法添加数据,最好不要忘记还需要进行提交“editor.commit();”保存需要保存的方法。SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。
下面用个例子来跑一下吧:
MainActivity类
public class MainActivity extends Activity
{
private boolean flag = false;
private TextView mTextView = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView) this.findViewById(R.id.TextView01);
/*对数据进行加载*/
//通过getPreferences()方法获取SharedPreferences对象
SharedPreferences set = getPreferences(Activity.MODE_PRIVATE);
//进行设置值
flag = set.getBoolean("flag", false);
if (flag)
{
mTextView.setText("当前状态:开");
flag = true;
}
else
{
mTextView.setText("当前状态:关");
}
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_UP:
mTextView.setText("当前状态:开");
flag = true;
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
mTextView.setText("当前状态:关");
flag = false;
break;
}
return true;
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
/*但我们退出此应用程序的时候就会为我们保存数据*/
//获取SharedPreferences对象
SharedPreferences state = getPreferences(0);
//获取SharedPreferences.Editor编辑对象
SharedPreferences.Editor editor = state.edit();
//将需要保存的值添加到编辑器中
editor.putBoolean("flag", flag);
//提交编辑器的内容,以此保存
editor.commit();
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
运行最后的结果,操作的每一步骤我都粘贴出来:
按下键盘的向下键,调制为“开”
返回到主页面,或者其他页面,只要退出该应用程序即可。这里就退到主页面吧:
最后,再进去看一下吧:
看看数据保存在哪里吧:data/data/