目录

前言

一 SharedPreferences基本介绍

二 SharedPreferences使用方法

三 SharedPreferences常见属性及方法

四 SharedPreferences简单案例

五 总结


前言

小伙伴们,在前面的一系列文章中我们分别介绍了Android视图控件、Android布局、Android四大组件,本文开始我们介绍一下Android中的数据存储。

一 SharedPreferences基本介绍

SharedPreferences是Android平台上一种轻量级的数据存储方式,用于保存和读取应用程序的配置信息或其他简单的持久化数据。它的主要特点包括:

  1. 键值对存储:SharedPreferences以键值对的形式存储数据,每个键和对应的值都必须是基本数据类型或其封装类。

  2. 应用内部存储:SharedPreferences使用XML文件来存储数据,数据保存在应用程序的私有目录中,只能被当前应用程序访问。

  3. 持久化存储:SharedPreferences中的数据会在应用关闭后仍然保留,并且可以在下次启动应用时重新读取使用。

  4. 配置信息存储:SharedPreferences常用于存储应用程序的配置信息,如用户偏好设置、登录状态等。

二 SharedPreferences使用方法

使用SharedPreferences进行数据存储和读取的基本步骤如下:

  1. 获取SharedPreferences对象:

    // 使用getSharedPreferences方法获取SharedPreferences对象
    SharedPreferences sharedPreferences = getSharedPreferences("文件名", MODE_PRIVATE);
    

    其中,"文件名"是用于标识保存数据的XML文件名,在同一个文件名下存储的数据将共享访问。

  2. 存储数据:

    // 获取SharedPreferences.Editor对象
    SharedPreferences.Editor editor = sharedPreferences.edit();
    
    // 使用put方法存储数据,键值对形式
    editor.putString("键", "值");  // 存储字符串数据
    editor.putInt("键", 值);       // 存储整型数据
    editor.putBoolean("键", 值);   // 存储布尔型数据
    
    // 提交保存
    editor.apply();
    

    可以根据需要使用不同的put方法来存储不同类型的数据。

  3. 读取数据:

    // 使用get方法读取数据,默认值为默认值参数指定的值
    String stringValue = sharedPreferences.getString("键", "默认值");
    int intValue = sharedPreferences.getInt("键", 默认值);
    boolean boolValue = sharedPreferences.getBoolean("键", 默认值);
    
  4. 通过getString、getInt、getBoolean等方法可以根据键获取存储的对应类型的值,并指定默认值,以防获取不到数据时返回设定的默认值。

  • 需要在合适的时机获取SharedPreferences对象,通常在活动(Activity)的onCreate方法中进行。
  • 存储数据时,使用apply()方法提交保存,确保异步保存数据,并且不会阻塞主线程。也可以使用commit()方法提交,但它会阻塞主线程。
  • 读取数据时,需要根据实际需要选择适当的默认值。
  • 使用相同的文件名可以实现数据的共享和访问。
  • 在应用程序范围内,可以多处使用SharedPreferences来进行数据存储和读取

三 SharedPreferences常见属性及方法

常见属性:

  1. MODE_PRIVATE: 表示创建的SharedPreferences文件只能被当前应用程序访问,其他应用无法读取。

常见方法:

  1. getSharedPreferences(String name, int mode): 获取SharedPreferences对象,参数包括文件名和存储模式。
  2. edit(): 返回一个SharedPreferences.Editor对象,用于修改SharedPreferences中的数据。
  3. putString(String key, String value): 存储字符串类型的数据。
  4. putInt(String key, int value): 存储整型数据。
  5. putBoolean(String key, boolean value): 存储布尔型数据。
  6. apply(): 提交保存修改的数据,异步操作,不会阻塞主线程。
  7. commit(): 提交保存修改的数据,同步操作,会阻塞主线程。
  8. getString(String key, String defaultValue): 获取存储的字符串类型数据,第二个参数为默认值。
  9. getInt(String key, int defaultValue): 获取存储的整型数据,第二个参数为默认值。
  10. getBoolean(String key, boolean defaultValue): 获取存储的布尔型数据,第二个参数为默认值。
  11. contains(String key): 判断指定键是否存在于SharedPreferences中。
  12. remove(String key): 移除指定键及其对应的值。
  13. clear(): 清除所有保存的数据。

四 SharedPreferences简单案例

import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private static final String SHARED_PREFS_NAME = "MyPrefs";
    private static final String KEY_NAME = "name";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 存储数据到SharedPreferences
        saveData("John Doe");

        // 读取数据并打印
        String savedName = loadData();
        System.out.println("Saved name: " + savedName);
    }

    private void saveData(String name) {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS_NAME, MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(KEY_NAME, name);
        editor.apply();
    }

    private String loadData() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS_NAME, MODE_PRIVATE);
        return sharedPreferences.getString(KEY_NAME, "");
    }
}

以上代码中,在onCreate()方法中,首先调用saveData()方法存储名字数据到SharedPreferences。然后调用loadData()方法读取保存的名字数据,并通过System.out.println()打印出来。

在这个例子中,我们将SharedPreference的文件名指定为"MyPrefs",并且定义了名字的键名"key_name"。可以根据需求修改这些值。

请注意,在实际应用中,AndroidManifest.xml文件中要注册MainActivity以便正确运行。

通过这个简单的案例,你可以学习到如何使用SharedPreferences存储和读取数据。

五 总结

通过SharedPreferences,我们可以方便地进行简单数据的存储和读取,适用于保存应用程序的配置信息、用户偏好设置等场景。但需要注意,它并不适合存储大量复杂的数据,对于复杂的数据存储需求,建议使用SQLite数据库或其他更适合的数据存储方式。

07-01 23:35