android用共享参数,Android学习指南之十八:共享参数类SharedPreferences的使用

本文介绍了Android中SharedPreferences的使用,它是一种轻量级的数据存储方式,用于存储简单的键值对数据。通过示例展示了如何在Service中使用SharedPreferences保存和读取音乐播放进度,从而实现播放状态的持久化。当Activity和Service在同一个进程中时,它们可以共享这些持久化数据。
摘要由CSDN通过智能技术生成

Android系统在数据存储和数据共享方面提供了多种方式,包括前面我们讲过的使用SQLite数据库的方式,本文将为大家讲解另一种共享数据和存储数据的方式-共享参数类SharedPreferences的使用。

一、SharedPreferences简介

SharedPreferences是一种轻量级的数据存储方式,学过Web开发的同学,可以想象它是一个小小的Cookie。它可以用键值对的方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中。下面我们用一个记录音乐播放进度的例子来学习SharedPreferences的使用。

二、SharedPreferences实例

1、建立一个新的项目Lesson19_HelloSharedPreferences,Activity名字叫MainHelloSharedPreferences.java。

2、建立一个MusicService.java的Service,代码如下:

Java代码packageandroid.basic.lesson19;

importandroid.app.Service;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.content.SharedPreferences;

importandroid.media.MediaPlayer;

importandroid.os.IBinder;

importandroid.widget.Toast;

publicclassMusicServiceextendsService {

//定义MediaPlayer播放器变量

MediaPlayer mPlayer =newMediaPlayer();

@Override

publicvoidonCreate() {

Toast.makeText(getApplicationContext(),"Service onCreate()", Toast.LENGTH_LONG).show();

//创建播放器

mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.babayetu);

//设置自动循环

mPlayer.setLooping(true);

}

@Override

publicIBinder onBind(Intent intent) {

Toast.makeText(getApplicationContext(),"Service onBind()", Toast.LENGTH_LONG).show();

//获得SharedPreferences对象

SharedPreferences preferences =this.getSharedPreferences("MusicCurrentPosition",Context.MODE_WORLD_WRITEABLE);

//播放器跳转到上一次播放的进度

mPlayer.seekTo(preferences.getInt("CurrentPosition",0));

//开始播放

mPlayer.start();

returnnull;

}

@Override

publicbooleanonUnbind(Intent intent){

Toast.makeText(getApplicationContext(),"Service onUnbind()", Toast.LENGTH_LONG).show();

//获得SharedPreferences对象

SharedPreferences preferences =this.getSharedPreferences("MusicCurrentPosition",Context.MODE_WORLD_WRITEABLE);

Toast.makeText(getApplicationContext(),"CurrentPosition="+mPlayer.getCurrentPosition(), Toast.LENGTH_LONG).show();

//获得editor对象,写入一个整数到SharePreferences中,记住要用commit()提交,否则不会实现写入操作

preferences.edit().putInt("CurrentPosition",mPlayer.getCurrentPosition()).commit();

mPlayer.stop();

returnfalse;

}

}

3、更改AndroidManifest.xml内容如下:

XML/HTML代码<?xmlversion ="1.0"encoding="utf-8"?>

4、res/layout/mail.xml的内容如下:

XML/HTML代码<?xmlversion ="1.0"encoding="utf-8"?>

5、MainHelloSharedPreferences.java的内容如下:

Java代码packageandroid.basic.lesson19;

importandroid.app.Activity;

importandroid.content.ComponentName;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.content.ServiceConnection;

importandroid.os.Bundle;

importandroid.os.IBinder;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.Toast;

publicclassMainHelloSharedPreferencesextendsActivity {

/** Called when the activity is first created. */

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//定义UI组件

Button b1 = (Button) findViewById(R.id.Button01);

Button b2 = (Button) findViewById(R.id.Button02);

//定义ServiceConnection对象

finalServiceConnection conn =newServiceConnection() {

@Override

publicvoidonServiceConnected(ComponentName name, IBinder service) {

}

@Override

publicvoidonServiceDisconnected(ComponentName name) {

}

};

//定义按钮的单击监听器

OnClickListener ocl =newOnClickListener() {

@Override

publicvoidonClick(View v) {

Intent intent =newIntent(MainHelloSharedPreferences.this,

android.basic.lesson19.MusicService.class);

switch(v.getId()) {

caseR.id.Button01:

Toast.makeText(getApplicationContext(),"Button01 onClick", Toast.LENGTH_LONG).show();

//绑定服务

bindService(intent,conn,Context.BIND_AUTO_CREATE);

break;

caseR.id.Button02:

Toast.makeText(getApplicationContext(),"Button02 onClick", Toast.LENGTH_LONG).show();

//取消绑定

unbindService(conn);

break;

}

}

};

//绑定单击监听器

b1.setOnClickListener(ocl);

b2.setOnClickListener(ocl);

}

}

6、运行程序,查看运行情况:

355e803b7b15ba70e65ba6a5456e729f.gif

3da6c8f0ceca1a52237ceb7dca524b74.gif

查看File Explorer,在/data/data/android.basic.lesson19/shared_prefs/目录下有一个MusicCurrentPosition.xml文件,点击右上角的按钮pull a file from the device,可以把这个xml文拷贝出来:

6422965bea961da29016369d66891ed7.gif

7、查看MusicCurrentPosition.xml的内容,可以看到音乐播放进度的数据存贮在这个xml中:

XML/HTML代码<?xmlversion ='1.0'encoding='utf-8'standalone='yes'?>

大家可以试着扩展下本实例,为Activity添加一个按钮,点击它实现的功能是取出SharedPreferences中的播放进度数据,显示在另一个文本框Textview02里。下面直接贴上最终的运行效果图,至于程序,大家可以试着自己写一下,更加深刻的理解Share,同一个进程中的不同组件是否都可以访问此共享的持久化数据?这一点是不是与Cookie有些类似?

2f72766c0832a7204501776065344760.gif

2012年7月31日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值