Android的数据存储和访问有三种方式:SharedPreferences、文件File和SQLite。前两种方式用于存储简单的数据,而SQLite是Android的专用数据库,其所用的也是和SQL Server和Mysql的语法相似的。这一节主要讲一下SharedPreferences这种方式存储数据。
我们用一个例子能够更好的理解,就用按上下键按钮设置音乐的开关并且保存起来,这一次将这个程序关闭后,如果下一次开启时,还能保留这一次的音乐开关的设置,并且也能播放音乐。(其中有一个问题,就是模拟器中得上下键启用问题,默认情况下是不能用的,我们要修改SDK里面的 config.ini文件的hpad的no改为yes即可)
布局文件很简单:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
我们要提取出来一个Model类musicModel,用于存储按键开关的方法,以后要使用到可以直接使用这个类。
musicModel.java
public class musicModel {
private MediaPlayer player;
private Context context;
public musicModel(Context context){
this.context = context;
}
/* 播放音乐 */
public void playMusic(){
/* 装载资源中的音乐 */
player = MediaPlayer.create(context,R.raw.star);
/* 设置是否循环 */
player.setLooping(true);
try {
player.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
player.start();
}
/* 停止音乐 */
public void stopMusic(){
if(player != null){
player.stop();
player.release();
}
}
}
然后是MainActivity.java
public class MainActivity extends Activity {
private musicModel model;
private TextView textView;
private Boolean musicState;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
model = new musicModel(this);
textView = (TextView)this.findViewById(R.id.text);
SharedPreferences preferences = getSharedPreferences("musicFile", MODE_PRIVATE);
musicState = preferences.getBoolean("musicState", false);
if(musicState){
textView.setText("当前状态是:开");
model.playMusic();
}else{
model.stopMusic();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/* 按键按下去的事件 */
/**
* 按键按下事件
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == event.KEYCODE_BACK){
SharedPreferences preferences =getSharedPreferences("musicFile", MODE_PRIVATE);
Editor editor = preferences.edit();
editor.putBoolean("musicState", musicState);
editor.commit();
if(musicState){
model.stopMusic();
}
finish();
}
return super.onKeyDown(keyCode, event);
}
/* 按键抬起的事件 */
/**
* 按键弹起事件
*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch(keyCode){
case KeyEvent.KEYCODE_DPAD_UP:
textView.setText("当前状态是:开");
musicState = true;
model.playMusic();
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
textView.setText("当前状态是:关");
musicState = false;
model.stopMusic();
break;
}
return super.onKeyUp(keyCode, event);
}
}
例子虽然简单,举一反三是关键!!!
我们可以看一下储存的数据文件。选择DDS,然后找到File Explorer,里边有一个data,下边还有一个data,找到你的应用程序的包名,然后打开就有两个文件夹,一个是lib,然后打开另一个,另一个就是就是你的数据存储文件。
你只需要点击右上角的存到桌面上,打开你就可以看见里边的信息了。