Android SharedPreferences和File
本讲内容:SharedPreferences和Android中的文件IO操作
1、SharedPreferences
2、Android中的文件IO操作
Android中进行数据共享和数据存储有多种方式,前面我们讲过使用Sqlite数据库的方式,今天我们讲一下SharedPreferences和文件读写操作方式。
一、SharedPreferences
SharedPreferences是一种轻量级的数据存储方式,学过Web开发的同学,可以想象它是一个小小的Cookie。它可以用键值对的方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中。下面我们用一个记录音乐播放进度的例子来学习SharedPreferences的使用。
1、建立一个新的项目Lesson19_HelloSharedPreferences,Activity名字叫MainHelloSharedPreferences.java
2、建立一个MusicService.java的Service,代码如下:
viewsourceprint?01packageandroid.basic.lesson19;
02
03importandroid.app.Service;
04importandroid.content.Context;
05importandroid.content.Intent;
06importandroid.content.SharedPreferences;
07importandroid.media.MediaPlayer;
08importandroid.os.IBinder;
09importandroid.widget.Toast;
10
11publicclassMusicServiceextendsService{
12
13//定义MediaPlayer播放器变量
14MediaPlayermPlayer=newMediaPlayer();
15
16@Override
17publicvoidonCreate(){
18Toast.makeText(getApplicationContext(),"ServiceonCreate()",Toast.LENGTH_LONG).show();
19//创建播放器
20mPlayer=MediaPlayer.create(getApplicationContext(),R.raw.babayetu);
21//设置自动循环
22mPlayer.setLooping(true);
23}
24
25@Override
26publicIBinderonBind(Intentintent){
27Toast.makeText(getApplicationContext(),"ServiceonBind()",Toast.LENGTH_LONG).show();
28//获得SharedPreferences对象
29SharedPreferencespreferences=this.getSharedPreferences("MusicCurrentPosition",Context.MODE_WORLD_WRITEABLE);
30//播放器跳转到上一次播放的进度
31mPlayer.seekTo(preferences.getInt("CurrentPosition",0));
32//开始播放
33mPlayer.start();
34returnnull;
35}
36
37@Override
38publicbooleanonUnbind(Intentintent){
39Toast.makeText(getApplicationContext(),"ServiceonUnbind()",Toast.LENGTH_LONG).show();
40//获得SharedPreferences对象
41SharedPreferencespreferences=this.getSharedPreferences("MusicCurrentPosition",Context.MODE_WORLD_WRITEABLE);
42Toast.makeText(getApplicationContext(),"CurrentPosition="+mPlayer.getCurrentPosition(),Toast.LENGTH_LONG).show();
43//获得editor对象,写入一个整数到SharePreferences中,记住要用commit()提交,否则不会实现写入操作
44preferences.edit().putInt("CurrentPosition",mPlayer.getCurrentPosition()).commit();
45mPlayer.stop();
46returnfalse;
47}
48}
3、更改AndroidManifest.xml内容如下:
viewsourceprint?01<?xmlversion="1.0"encoding="utf-8"?>
02<MANIFESTpackage="android.basic.lesson19"xmlns:android="http://schemas.android.com/apk/res/android"android:versioncode="1"android:versionname="1.0">
03<APPLICATIONandroid:label="@string/app_name"android:icon="@drawable/icon">
04<ACTIVITYandroid:label="@string/app_name"android:name=".MainHelloSharedPreferences">
05<INTENT-filter>
06<ACTIONandroid:name="android.intent.action.MAIN"/>
07<CATEGORYandroid:name="android.intent.category.LAUNCHER"/>
08</INTENT>
09</ACTIVITY>
10<SERVICEandroid:name=".MusicService"android:enabled="true">
11</SERVICE>
12</APPLICATION>
13<USES-sdkandroid:minsdkversion="8"/>
14
15</MANIFEST>
4、res/layout/mail.xml的内容如下:
viewsourceprint?01<?xmlversion="1.0"encoding="utf-8"?>
02<LINEARLAYOUTxmlns:android="http://schemas.android.com/apk/res/android"android:layout_height="fill_parent"android:layout_width="fill_parent"android:orientation="vertical">
03<TEXTVIEWandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:id="@+id/TextView01"android:text="SharedPreferences的使用"android:textsize="20sp">
04</TEXTVIEW>
05
06<BUTTONandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:id="@+id/Button01"android:text="绑定音乐播放服务"android:textsize="20sp"android:layout_margintop="10dp">
07</BUTTON>
08<BUTTONandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:id="@+id/Button02"android:text="解绑定音乐播放服务"android:textsize="20sp"android:layout_margintop="10dp">
09</BUTTON>
10</LINEARLAYOUT>
5、MainHelloSharedPreferences.java的内容如下:
viewsourceprint?01packageandroid.basic.lesson19;
02
03importandroid.app.Activity;
04importandroid.content.ComponentName;
05importandroid.content.Context;
06importandroid.content.Intent;
07importandroid.content.ServiceConnection;
08importandroid.os.Bundle;
09importandroid.os.IBinder;
10importandroid.view.View;
11importandroid.view.View.OnClickListener;
12importandroid.widget.Button;
13importandroid.widget.Toast;
14
15publicclassMainHelloSharedPreferencesextendsActivity{
16/**Calledwhentheactivityisfirstcreated.*/
17@Override
18publicvoidonCreate(BundlesavedInstanceState){
19super.onCreate(savedInstanceState);
20setContentView(R.layout.main);
21
22//定义UI组件
23Buttonb1=(Button)findViewById(R.id.Button01);
24Buttonb2=(Button)findViewById(R.id.Button02);
25
26//定义ServiceConnection对象
27finalServiceConnectionconn=newServiceConnection(){
28
29@Override
30publicvoidonServiceConnected(ComponentNamename,IBinderservice){
31}
32
33@Override
34publicvoidonServiceDisconnected(ComponentNamename){
35}
36};
37
38//定义按钮的单击监听器
39OnClickListenerocl=newOnClickListener(){
40@Override
41publicvoidonClick(Viewv){
42Intentintent=newIntent(MainHelloSharedPreferences.this,
43android.basic.lesson19.MusicService.class);
44switch(v.getId()){
45caseR.id.Button01:
46Toast.makeText(getApplicationContext(),"Button01onClick",Toast.LENGTH_LONG).show();
47//绑定服务
48bindService(intent,conn,Context.BIND_AUTO_CREATE);
49break;
50caseR.id.Button02:
51Toast.makeText(getApplicationContext(),"Button02onClick",Toast.LENGTH_LONG).show();
52//取消绑定
53unbindService(conn);
54break;
55}
56}
57};
58
59//绑定单击监听器
60b1.setOnClickListener(ocl);
61b2.setOnClickListener(ocl);
62
63}
64}
6、运行程序,查看运行情况:
查看FileExplorer,在/data/data/android.basic.lesson19/shared_prefs/目录下有一个MusicCurrentPosition.xml文件,点击右上角的按钮pullafilefromthedevice,可以把这个xml文拷贝出来
7、查看MusicCurrentPosition.xml的内容,可以看到音乐播放进度的数据存贮在这个xml中
viewsourceprint?1<?xmlversion='1.0'encoding='utf-8'standalone='yes'?>
2<MAP>
3<INTvalue="15177"name="CurrentPosition"/>
4</MAP>
兴趣的同学可以尝试一下,在Activity中增加一个按钮,点击以后把SharedPreference中的播放进度数据取出来,显示在另一个文本框Textview02里,我在这里把最后的运行结果图放这里,代码你们可以自己练习着敲出来,从中体会Share的意思,是不是在同一个APK中不同的组件之间都可以去访问这个共享的持久化数据?从这一点上说是不是有点像是Cookie?