前言
小伙伴们,在前面的一系列文章中我们分别介绍了Android视图控件、Android布局、Android四大组件,本文开始我们介绍一下Android中的数据存储。
一 SharedPreferences基本介绍
SharedPreferences是Android平台上一种轻量级的数据存储方式,用于保存和读取应用程序的配置信息或其他简单的持久化数据。它的主要特点包括:
- 键值对存储:SharedPreferences以键值对的形式存储数据,每个键和对应的值都必须是基本数据类型或其封装类。
- 应用内部存储:SharedPreferences使用XML文件来存储数据,数据保存在应用程序的私有目录中,只能被当前应用程序访问。
- 持久化存储:SharedPreferences中的数据会在应用关闭后仍然保留,并且可以在下次启动应用时重新读取使用。
- 配置信息存储:SharedPreferences常用于存储应用程序的配置信息,如用户偏好设置、登录状态等。
二 SharedPreferences使用方法
使用SharedPreferences进行数据存储和读取的基本步骤如下:
获取SharedPreferences对象:
代码语言:javascript复制// 使用getSharedPreferences方法获取SharedPreferences对象
SharedPreferences sharedPreferences = getSharedPreferences("文件名", MODE_PRIVATE);
其中,"文件名"是用于标识保存数据的XML文件名,在同一个文件名下存储的数据将共享访问。
存储数据:
代码语言:javascript复制// 获取SharedPreferences.Editor对象
SharedPreferences.Editor editor = sharedPreferences.edit();
// 使用put方法存储数据,键值对形式
editor.putString("键", "值"); // 存储字符串数据
editor.putInt("键", 值); // 存储整型数据
editor.putBoolean("键", 值); // 存储布尔型数据
// 提交保存
editor.apply();
可以根据需要使用不同的put方法来存储不同类型的数据。
读取数据:
代码语言:javascript复制// 使用get方法读取数据,默认值为默认值参数指定的值
String stringValue = sharedPreferences.getString("键", "默认值");
int intValue = sharedPreferences.getInt("键", 默认值);
boolean boolValue = sharedPreferences.getBoolean("键", 默认值);
通过getString、getInt、getBoolean等方法可以根据键获取存储的对应类型的值,并指定默认值,以防获取不到数据时返回设定的默认值。
- 需要在合适的时机获取SharedPreferences对象,通常在活动(Activity)的onCreate方法中进行。
- 存储数据时,使用apply()方法提交保存,确保异步保存数据,并且不会阻塞主线程。也可以使用commit()方法提交,但它会阻塞主线程。
- 读取数据时,需要根据实际需要选择适当的默认值。
- 使用相同的文件名可以实现数据的共享和访问。
- 在应用程序范围内,可以多处使用SharedPreferences来进行数据存储和读取
三 SharedPreferences常见属性及方法
常见属性:
MODE_PRIVATE
: 表示创建的SharedPreferences文件只能被当前应用程序访问,其他应用无法读取。
常见方法:
getSharedPreferences(String name, int mode)
: 获取SharedPreferences对象,参数包括文件名和存储模式。edit()
: 返回一个SharedPreferences.Editor对象,用于修改SharedPreferences中的数据。putString(String key, String value)
: 存储字符串类型的数据。putInt(String key, int value)
: 存储整型数据。putBoolean(String key, boolean value)
: 存储布尔型数据。apply()
: 提交保存修改的数据,异步操作,不会阻塞主线程。commit()
: 提交保存修改的数据,同步操作,会阻塞主线程。getString(String key, String defaultValue)
: 获取存储的字符串类型数据,第二个参数为默认值。getInt(String key, int defaultValue)
: 获取存储的整型数据,第二个参数为默认值。getBoolean(String key, boolean defaultValue)
: 获取存储的布尔型数据,第二个参数为默认值。contains(String key)
: 判断指定键是否存在于SharedPreferences中。remove(String key)
: 移除指定键及其对应的值。clear()
: 清除所有保存的数据。
四 SharedPreferences简单案例
代码语言:javascript复制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数据库或其他更适合的数据存储方式。