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?

相关推荐