http://ajava.org/readbook/J2ME/androidkfysz/17348.html
首先介绍的是SharedPreferences,它是Android提供用来存储一些简单的配置信息的一种机制,例如,一些默认欢迎语、登录的用户名和密码等。其以键值对的方式存储,使得我们可以很方便的读取和存入,下面看一个演示的例子。
1.第一步
在Eclipse中打开ex_SharedPreferences 项目,其步骤如下所示。
(1)新建一个项目。依次单击File→New→Android Project项。
(2)在新建项目的对话框中,选择Create project from existing source项。
(3)单击浏览,找到ex_SharedPreferences项目,然后单击确定。
其程序的目录结构如图8-1所示。
2.第二步
单击运行项目,可以看到主界面如图8-2所示,这个界面的布局信息都在main.xml文件当中,在一个LinearLayout当中放了3个TextView和两个EditView组件,代码如下所示:
▲ 图8-1 程序目录结构 ▲ 图8-2 主界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="SharedPreferences demo"
/>
<TextView Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Name:" />
<EditText Android:id="@+id/name"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="" />
<TextView Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Password:" />
<EditText Android:id="@+id/password"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:password="true"
Android:text="" />
</LinearLayout>
代码解释:
如上代码表示,使用LinearLayout布局,其中放置3个用来做界面提示的文本框(TextView)组件和两个用于输入Name和Password(注意这里使用了 Android:password="true")的编辑框(EditText)组件,运行这个应用,可以看到其界面如图8-2所示。
在图8-2中,我们可以看到,初始状态下两个EditView都是空的,现在输入一些字符,如图8-3所示。
如图8-3所示,我们在Name文本框中输入IceskYsl,在Password文本框中输入Password,然后退出这个应用。我们在应用程序列表中找到这个应用,重新启动,可以看到其使用了前面输入的Name和Password,如图8-4所示。
▲ 图8-3 输入Name和Password ▲ 图8-4 重新启动应用
由此可见,应用保存了我们输入的Name和Password,现在来看看其实现的代码,在DBShared Preferences.java文件中,此文件的代码如下所示:
package us.imnet.iceskysl.db;
import Android.app.Activity;
import Android.content.SharedPreferences;
import Android.os.Bundle;
import Android.widget.EditText;
public class DBSharedPreferences extends Activity {
public static final String SETTING_INFOS = "SETTING_Infos";
public static final String NAME = "NAME";
public static final String PASSWORD = "PASSWORD";
private EditText field_name; //接收用户名的组件
private EditText filed_pass; //接收密码的组件
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Find VIew
field_name = (EditText) findViewById(R.id.name); //首先获取用来输入用户名的组件
filed_pass = (EditText) findViewById(R.id.password); //同时也需要获取输入密码的组件
// Restore preferences
SharedPreferences settings = getSharedPreferences(SETTING_INFOS, 0); //获取一个SharedPreferences对象
String name = settings.getString(NAME, ""); //取出保存的NAME
String password = settings.getString(PASSWORD, ""); //取出保存的PASSWORD
//Set value
field_name.setText(name); //将取出来的用户名赋予field_name
filed_pass.setText(password); //将取出来的密码赋予filed_pass
}
@Override
protected void onStop(){
super.onStop();
SharedPreferences settings = getSharedPreferences(SETTING_INFOS, 0); //首先获取一个SharedPreferences对象
settings.edit()
.putString(NAME, field_name.getText().toString())
.putString(PASSWORD, filed_pass.getText().toString())
.commit();
} //将用户名和密码保存进去
}
代码解释:
通过上述代码可以看到,在onCreate中使用 findViewById得到两个EditView后,使用getSharedPreferences取得SharedPreferences对象 settings,然后使用getString取得其中保存的值,最后使用setText将其值设置为两个EditText的值。
而在程序运行onStop过程,也就是在程序退出时,首先使用getSharedPreferences得到settings;然后调用edit()方法使其处于可以编辑状态,并使用putString 将两个EditText中的值保存起来;最后使用commit()方法提交即可保存。
小知识 | SharedPreferences保存到哪里去了? SharedPreferences是以XML的格式以文件的方式自动保存的,在DDMS中的File Explorer中展开到/data/data/<package name>/shared_prefs下,以上面这个为例,可以看到一个叫做SETTING_Infos.xml的文件,如图8-5所示。 |
▲ 图8-5 SharedPreferences文件
将其导出到设备中,可以打开这个文件,看到其代码内容为:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="PASSWORD">Password</string>
<string name="NAME">IceskYsl</string>
</map>
小知识 | 我们可以通过「getXXX」函数,从 SharedPreferences中读取不同类型的内容,例如,上面我们使用[getString]读取String类型的内容。 |
注意 | Preferences只能在同一个包内使用,不能在不同的包之间使用。 |