一.SharedPreferences基本

要想使用SharedPreferences 来存储数据,首先需要获取到SharedPreferences对象。Android 中主要提供了三种方法用于得到SharedPreferences 对象。

 

1. Context 类中的getSharedPreferences()方法此方法接收两个参数,第一个参数用于指定SharedPreferences 文件的名称,如果指定的文件不存在则会创建一个, SharedPreferences 文件都是存放在/data/data/<package name>/shared_prefs/目录下的。第二个参数用于指定操作模式,主要有两种模式可以选择,MODE_PRIVATE 和MODE_MULTI_PROCESS。MODE_PRIVATE 仍然是默认的操作模式,和直接传入0 效果是相同的,表示只有当前的应用程序才可以对这个SharedPreferences 文件进行读写。MODE_MULTI_PROCESS 则一般是用于会有多个进程中对同一个SharedPreferences 文件进行读写的情况。类似地MODE_WORLD_READABLE 和MODE_WORLD_WRITEABLE 这两种模式已在Android 4.2 版本中被废弃。

 

2. Activity 类中的getPreferences()方法

这个方法和Context 中的getSharedPreferences()方法很相似,不过它只接收一个操作模式参数, 因为使用这个方法时会自动将当前活动的类名作为SharedPreferences 的文件名。

 

3. PreferenceManager 类中的getDefaultSharedPreferences()方法这是一个静态方法,它接收一个Context 参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences 文件。

 

得到了SharedPreferences 对象之后,就可以开始向SharedPreferences 文件中存储数据了,主要可以分为三步实现。

(1). 调用SharedPreferences 对象的edit() 方法来获取一个SharedPreferences.Editor 对象。

 

(2). 向SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用putBoolean 方法,添加一个字符串则使用putString()方法,以此类推。

 

(3). 调用commit()方法将添加的数据提交,从而完成数据存储操作。

 

从SharedPreferences 文件中读取数据更加的简单。SharedPreferences 对象中提供了一系列的get 方法用于对存储的数据进行读取,每种get方法都对应了SharedPreferences. Editor 中的一种put 方法,比如读取一个布尔型数据就使用getBoolean()方法,读取一个字符串就使用getString()方法。这些get 方法都接收两个参数,第一个参数是键,传入存储数据时使用的键就可以得到相应的值了,第二个参数是默认值,即表示当传入的键找不到对应的值时,会以什么样的默认值进行返回。

 

二.程序示例

1.实现一个登陆框,如果勾选记住密码,则将密码保存起来,示意图

 SharedPreferences_默认值

 

2.布局文件activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>

 

<TableLayout

 

    xmlns:android="http://schemas.android.com/apk/res/android"

 

    android:layout_width="match_parent"

 

    android:layout_height="match_parent"

 

    android:stretchColumns="1"

 

    <TableRow>

 

        <TextView android:layout_height="wrap_content"

 

                  android:text="用户登录"

 

                  android:layout_span="2"

 

                  android:gravity="center"

 

                  android:padding="15dp"

 

                  android:layout_margin="15dp"/>

 

    </TableRow>

 

 

 

    <TableRow>

 

        <TextView android:layout_height="wrap_content"

 

                  android:text="用户名"

            android:textSize="18sp"

                  android:paddingRight="15dp"

                  android:paddingLeft="5dp"/>

 

        <EditText android:id="@+id/username"

 

                  android:layout_height="wrap_content"

 

                  android:hint="请输入账号"

 

 

                  />

 

    </TableRow>

 

 

 

    <TableRow>

 

        <TextView android:layout_height="wrap_content"

 

                  android:text="密码"

                  android:textSize="18sp"

            android:paddingRight="15dp"

                  android:paddingLeft="5dp"/>

 

        <EditText android:id="@+id/password"

 

                  android:layout_height="wrap_content"

 

                  android:hint="请输入密码"

 

                  android:inputType="textPassword"

 

                  />

 

    </TableRow>

 

    <TableRow>

    <CheckBox android:layout_height="wrap_content"

        android:text="记住密码"

        android:layout_span="2"

        android:id="@+id/remember"/>

    </TableRow>

 

 

 

    <TableRow>

 

        <Button android:id="@+id/btn"

 

                android:text="登录"

 

                android:layout_height="wrap_content"

 

                android:layout_span="2"/>

 

    </TableRow>

 

 

 

 

 

</TableLayout>

 

 

3.MainActivity:

public class MainActivity extends Activity {

 

    private  SharedPreferences preferences;

    private  SharedPreferences.Editor editor;

    private EditText username,password;

    private Button btn;

    private CheckBox remember;

 

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        preferences = PreferenceManager.getDefaultSharedPreferences(this);

 

        // 初始化控件

        username = (EditText)findViewById(R.id.username);

        password = (EditText)findViewById(R.id.password);

        remember = (CheckBox)findViewById(R.id.remember);

        btn = (Button)findViewById(R.id.btn);

 

        boolean isRemember = preferences.getBoolean("remember_password", false);

        if( isRemember ){

            String account = preferences.getString("username", "");

            String pwd = preferences.getString("password", "");

            username.setText(account);

            password.setText(pwd);

            remember.setChecked(true);

        }

 

        btn.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                String account = username.getText().toString();

                String pwd = password.getText().toString();

                if( account.equals("admin") && pwd.equals("123456") ){

                    editor = preferences.edit();

                    if( remember.isChecked() ){

                        editor.putBoolean("remember_password", true);

                        editor.putString("username", account);

                        editor.putString("password", pwd);

                    }else{

                        editor.clear();

                    }

                    editor.commit();

                    Intent intent = new Intent(MainActivity.this, MainActivity.class);

                    startActivity(intent);

                }else{

                    Toast.makeText(MainActivity.this, "登录错误", Toast.LENGTH_LONG).show();

                }

            }

        });

    }

}