使用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存储的用法吧。新建一个 SharedPreferencesTest项目,然后修改 activity_main.xml

中的代码,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
android:id="@+id/save_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save data"
/>
</LinearLayout>

这里我们不做任何复杂的功能,只是简单地放置了一个按钮,用于将一些数据存储到
SharedPreferences文件当中。然后修改 MainActivity 中的代码,如下所示:
public class MainActivity extends Activity {
private Button saveData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
saveData = (Button) findViewById(R.id.save_data);
saveData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = getSharedPreferences("data",
MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.commit();
}
});
}
}

可 以看到,这里首先给按钮注册了一个点击事件,然后在点击事件中通过
getSharedPreferences()方法指定SharedPreferences的文件名为data,并得到了SharedPreferences.Editor
对象。接着向这个对象中添加了三条不同类型的数据,最后调用 commit()方法进行提交,从
而完成了数据存储的操作。






可以看到,我们刚刚在按钮的点击事件中添加的所有数据都已经成功保存下来了,并且
SharedPreferences 文件是使用 XML 格式来对数据进行管理的。
那么接下来我们自然要看一看,如何从 SharedPreferences 文件中去读取这些数据了。


修改 activity_main.xml 中的代码,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/save_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save data"
/>
<Button
android:id="@+id/restore_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Restore data"
/>
</LinearLayout>


这里增加了一个还原数据的按钮,我们希望通过点击这个按钮来从 SharedPreferences文
件中读取数据。修改 MainActivity 中的代码,如下所示:


public class SharedPreferencesActivity extends Activity {
    private Button saveData;
    private Button restoreData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sharedpreferences);
        saveData = (Button) findViewById(R.id.save_data);
        restoreData = (Button) findViewById(R.id.restore_data);
        saveData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = getSharedPreferences("data",
                        MODE_PRIVATE).edit();
                editor.putString("name", "Tom");
                editor.putInt("age", 28);
                editor.putBoolean("married", false);
                editor.commit();
            }
        });
        restoreData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences pref = getSharedPreferences("data",
                        MODE_PRIVATE);
                String name = pref.getString("name", "");
                int age = pref.getInt("age", 0);
                boolean married = pref.getBoolean("married", false);
                Log.d("SharedActivity", "name is " + name);
                Log.d("SharedActivity", "age is " + age);
                Log.d("SharedActivity", "married is " + married);
            }
        });
    }
}

可以看到,我们在还原数据按钮的点击事件中首先通过 getSharedPreferences()方法得到
了 SharedPreferences 对象,然后分别调用它的 getString()、getInt()和 getBoolean()方法去获取
前面所存储的姓名、年龄和是否已婚,如果没有找到相应的值就会使用方法中传入的默认值
来代替,最后通过 Log 将这些值打印出来。





  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SharedPreferences 是 Android 中一种轻量级的存储方式,可以用于存储一些简单的键值对数据。下面是使用 SharedPreferences 存储数据的基本步骤: 1. 获取 SharedPreferences 对象:可以通过 Context 的 getSharedPreferences() 或 getPreferences() 方法获取 SharedPreferences 对象,其中 getSharedPreferences() 方法可以指定 SharedPreferences 的名称和模式,getPreferences() 方法则使用默认名称和私有模式。 2. 获取 SharedPreferences.Editor 对象:通过 SharedPreferences 对象的 edit() 方法获取 SharedPreferences.Editor 对象。 3. 存储数据使用 SharedPreferences.Editor 对象的 putXxx() 方法存储数据,其中 Xxx 表示数据类型,例如 putString() 存储字符串,putInt() 存储整数等。 4. 提交数据使用 SharedPreferences.Editor 对象的 commit() 或 apply() 方法提交数据,其中 commit() 方法同步提交数据,apply() 方法则是异步提交数据。 下面是一个示例代码,演示了如何使用 SharedPreferences 存储字符串数据: ```java // 获取 SharedPreferences 对象 SharedPreferences sp = getSharedPreferences("my_sp", Context.MODE_PRIVATE); // 获取 SharedPreferences.Editor 对象 SharedPreferences.Editor editor = sp.edit(); // 存储数据 editor.putString("username", "Tom"); // 提交数据 editor.apply(); ``` 在上面的代码中,使用了名称为 "my_sp" 的 SharedPreferences 对象存储了一个用户名为 "Tom" 的字符串数据。可以通过 getString() 方法获取存储的字符串数据: ```java // 获取 SharedPreferences 对象 SharedPreferences sp = getSharedPreferences("my_sp", Context.MODE_PRIVATE); // 获取字符串数据 String username = sp.getString("username", ""); ``` 在上面的代码中,使用了 getString() 方法获取了存储的用户名数据,如果不存在则返回空字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值