`
yanfaguanli
  • 浏览: 663199 次
文章分类
社区版块
存档分类
最新评论

Android学习小Demo(7)SharedPreference的使用

 
阅读更多

在Android系统中,有各种不同的存储方式,而SharedPreference就是其中最简单的一种。

SharedPreference本质上就是一个xml文件,其存储结构则是一个Map,里面的值都是以键值对<Key,Value>的形式存在,如下图:


可以看到根结点是一个<Map>元素,下面的每一个元素都是我们存进去的值,分别对应不同的基本属性,sharedpreference也仅支持这些简单的基本属性。

因为其简单,所以一般来说,我们用sharedpreference来存储一些简单的状态信息,比如我们做音乐播放器的时候,当我们退出程序,可以将正在播放的歌曲和其进度给写到一个sharedpreference里面,当下次重新打开播放器的时候,就可以将先前保存的状态给拿出来,继续播放。

接下来我们就来看一下其用法,我们写一个登陆界面:

1)MainActivity:在登陆界面输入用户名跟密码,点击按钮,将用户名跟密码保存在sharedpreference,进入欢迎界面。

2)WelcomeActivity:在欢迎界面,从sharedpreference中拿出用户名,展示在界面上。

代码如下:

public class MainActivity extends Activity implements OnClickListener{
	...
	private SharedPreferences sharedPreferences;
	private SharedPreferences.Editor editor;
	...

	@Override
	protected void onCreate(Bundle savedInstanceState) {		
		...		
		sharedPreferences = this.getSharedPreferences(ACCOUNTS, MODE_PRIVATE);
		editor = sharedPreferences.edit();
	}
	...	
	private boolean write(){
		username = etUsername.getText().toString();
		password = etPassword.getText().toString();			
		
		editor.putString(USERNAME, username);
		editor.putString(PASSWORD, password);
		editor.putBoolean("boolean", true);
		editor.putFloat("float", 2.0f);
		editor.putInt("int", 1000);
		editor.putLong("Long", 1234567890l);
		
		editor.commit();		
		...
	}

}

我们来看一下sharedpreference的使用:

1)利用this.getSharedPreferences方法来获取一个对象:

1.1)其中第一个参数是这个文件的名字,当我们保存的时候,文件会被放在data/data/包名/shared_prefs的路径下:


1.2)第二个参数是一个Mode,一般会用到以下三个值:

a)MODE_PRIVATE:表明是私有的,创建的文件只能由当前应用程序访问。

b)MODE_WORLD_READABLE:世界可读,很显然,其他应用程序也能访问,但只能读。

c)MODE_WORLD_WRITABLE:世界可写,风险更大,其他应用程序不仅能读,还能写(会产生覆盖)。

2)如果我们只是需要去读取值的话,比如在WelcomeActivity中,我们只需要去读取其里面的值,只要获取这个对象就可以了。

	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_welcome);		
				
		sharedPreferences = this.getSharedPreferences(MainActivity.ACCOUNTS, MODE_PRIVATE);
		
		tvWlcUser = (TextView) findViewById(R.id.tvWlcUser);
		String username = sharedPreferences.getString(MainActivity.USERNAME, "Mr. Unknown");
		tvWlcUser.setText(username);
		
	}
在上面,我们可以调用sharedpreference.getXXX等方法来获取对应类型的值,第一个参数是Key值,第二个参数是取不到value的时候,给的默认值。

3)当我们想要往文件里面写值的时候,如第一段代码里面所写,我们就还需要一个editor对象。其实所有的写值操作是通过editor的对象来写的,它就像一个事务一样,最后要调用 editor.commit()方法才能将数据写到文件中,并保存在上面所写的文档中。

4)那么如果我们要将原先写的数据删掉呢?我们还是要通过editor对象来操作。editor对象提供了remove(String key)和clear()的方法,可以让我们将之前写入的值给擦掉,当然,最后也别忘了要调用commit方法。

private boolean remove(){
		editor.remove(USERNAME);
		editor.remove(PASSWORD);
		editor.remove("boolean");
		editor.remove("float");
		editor.remove("int");
		editor.remove("Long");
		editor.commit();
		return true;
	}

下面是登陆界面,随便输入用户名跟密码,然后点击login,就会进入到欢迎界面。源代码请点击!



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics