Android数据存储之SharedPreferences

来源:互联网 发布:三维软件培训机构 编辑:程序博客网 时间:2024/05/19 06:16

阶段一.基本知识

数据存储课分为以下几种形式:

1.SharedPreferences用来存储"键值对"格式的数据

2.File:FileInputStream和FileOutputStream

3.SQLite:提供了标准的数据库,支持SQL语句

4.NetWork

5.ContentProvider,实现不同应用程序之间的数据共享

阶段二.案例分析

SharePreferences用来保存软件配置参数,如QQ、手机

保存当前的音乐状态

1.首先是界面设计

只需用一个TextView来说明现在的音乐状态,字符串要在Strings里设置,以方便修改,把相应的音乐文件放在res-raw(需新建)文件夹中注意在调用时不要调用成系统自带的,而引入系统包)

xml代码如下:

<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/musicStateShow"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/currentMusic" /></RelativeLayout>


 

2.主要代码

采用分层的设计模式,把音乐的开关状态的代码单独放在一个包里,作为模型

代码如下:

public class Midiplayer {public MediaPlayer playermusic=null;public Context mcontext;//构造函数public Midiplayer(Context Context){mcontext=Context;}//播放音乐
       public void playMusic(){playermusic = MediaPlayer.create(mcontext, R.raw.start);playermusic.setLooping(true);try{playermusic.prepare();}catch (IllegalStateException e) {e.printStackTrace();// TODO: handle exception}catch (IOException e) {// TODO: handle exceptione.printStackTrace();}playermusic.start();}
//关闭音乐public void freeMusic(){if(playermusic!=null){playermusic.stop();playermusic.release();}}}
MainActivity中的代码
public class MainActivity extends Activity {private TextView musicStateShow;private Midiplayer midplayer;
//设置当前音乐的状态,初始值设为关
private boolean musicState = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
//获取TextViewde的值
musicStateShow = (TextView) findViewById(R.id.musicStateShow);midplayer = new Midiplayer(this);
//第一个参数指定保存参数的xml的文件名,第二个参数参数指定操作模式,只能被本文所访问
SharedPreferences sharePreferences = getSharedPreferences("musicStateFile", MODE_PRIVATE);
 
musicState = sharePreferences.getBoolean("musicState", false);if (musicState) {musicStateShow.setText("当前音乐状态为:开");midplayer.playMusic();} else {musicStateShow.setText("当前音乐状态为:关");midplayer.freeMusic();}}
//按键弹起事件@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {// TODO Auto-generated method stub
//判断键值对音乐状态进行改变
switch (keyCode) {case KeyEvent.KEYCODE_DPAD_UP:musicStateShow.setText("当前音乐状态为:开");musicState = true;midplayer.playMusic();break;case KeyEvent.KEYCODE_DPAD_DOWN:musicStateShow.setText("当前音乐状态为:关");musicState = false;midplayer.freeMusic();break;default:break;}return super.onKeyUp(keyCode, event);}
//按键按下事件@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {//退出应用程序是保存数据
if(keyCode==KeyEvent.KEYCODE_BACK){SharedPreferences sharedPreferences=getSharedPreferences("musicStateFile", MODE_PRIVATE);Editor editor=sharedPreferences.edit();
//此时数据保存在内存中
editor.putBoolean("musicState", musicSate);
//为防止频繁操作,永久保存到xml中,提高性能editor.commit();if(musicSate){midiPlayer.freeMusic();}finish();}return super.onKeyDown(keyCode, event);
}@Overridepublic 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;}}
注:android模拟器中上下左右键不能用,要修改安装文件中.avd文件夹中的config.ini中的属性hw.dpad为yes
3运行结果
 
 


 

 

	
				
		
原创粉丝点击