Android - SharePreferences数据存储
Posted 小柴的回忆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android - SharePreferences数据存储相关的知识,希望对你有一定的参考价值。
SharedPreferences的简单使用
小柴的笔记
一、SharePreferences
SharePrefences是一个轻量级的数据库,存储方式是以XML方式来保存的,数据格式是以 Key - Value 键值对的方式存储的,常用于保存一些状态值,适合保存少量数据,并不适合保存大量数据。支持存储的数据类型是:boolean、float、int、long、String、StringSet
二、使用过程
1.创建一个SharedPreferences实例对象
通过Context.getSharedPreferences(String name, int mode)
String name : SharedPreferences的文件名
int mode : 操作模式有以下内容
0 默认值 与MODE_PRIVATE一样的作用
MODE_PRIVATE 默认模式,创建的文件只能被调用应用程序访问
MODE_WORLD_READABLE 在API17中被弃用
MODE_WORLD_WRITEABLE 在API17中被弃用
MODE_MULTI_PROCESS 在API23中被弃用, 即使在此过程中已加载SharedPreferences,也会检查磁盘上的文件是否被修改
private static final String SP_FILE_NAME = "sp_file";
private SharedPreferences mSp;
mSp = context.getSharedPreferences(SP_FILE_NAME, Context.MODE_PRIVATE);
2、创建SharedPreferences.Edit()对象
SharedPreferences.Editor editor = mSp.edit();
3、通过SharedPreferences.Edit()对象设置要保存的数据
SharedPreferences.Editor editor = mSp.edit();
editor.putBoolean(String key, boolean value);
editor.putInt(String key, int value);
editor.putString(String key, String value);
editor.putFloat(String key, float value);
editor.putLong(String key, long value);
4、通过 apply()或commit()方法提交数据
SharedPreferences.Editor editor = mSp.edit();
editor.putBoolean(String key, boolean value);
editor.putInt(String key, int value);
editor.putString(String key, String value);
editor.putFloat(String key, float value);
editor.putLong(String key, long value);
/**
* 使用apply()或commit()方法即可提交
* 他们的区别下面有讲
*/
editor.apply();
boolean result = editor.commit();
5、apply() 和 commit()的区别
void apply()
boolean commit()
apply()没有返回值,commit()有boolean返回值,返回true就是写入成功
apply()是将数据提交到内存,再异步进行写入磁盘,当apply写入内存后,还没写入磁盘的时候,是有可能后面又有数据写入,将前面apply()写入内存的数据覆盖。
commit()是将数据同步写入磁盘,后面又数据来,也得等当前数据结束了,再保存后面的数据
6、SharedPreferences.getXXX()获取数据
mSp.getInt(key, 0);
mSp.getString(key, null);
mSp.getBoolean(key, false);
mSp.getFloat(key, 0);
mSp.getLong(key, 0);
7.通过SharedPreferences.Edit 的 remove()删除莫格数据 或clear()清空全部数据
//删除名为key的数据
SharedPreferences.Editor editor = mSp.edit();
editor.remove(String key);
editor.apply();
//清空全部数据
SharedPreferences.Editor editor = mSp.edit();
editor.clear();
editor.apply();
三、使用方法
1.封装一个SharedPreferences类
比较简单,一个创建单例的方法,一个创建SharedPreferences
还有一些获取与写入数据的方法。不懂上面有解释
public class SPUser {
private static final String SP_FILE_NAME = "sp_file";
public static SPUser instance = null;
private static SharedPreferences mSp;
/**
* 创建一个SharedPreferences实例对象
*/
private SPUser(Context context) {
if (mSp == null) {
mSp = context.getSharedPreferences(SP_FILE_NAME, Context.MODE_PRIVATE);
}
}
/**
* 单例是否创建,不存在就创建,存在就返回单例
* 使用synchronized 反正创建多个实例对象
*/
public static SPUser getInstance(Context context) {
if (instance == null) {
synchronized (SPUser.class) {
if (instance == null) {
instance = new SPUser(context);
}
}
}
return instance;
}
public static void putBoolean(String key, boolean value) {
SharedPreferences.Editor editor = mSp.edit();
editor.putBoolean(key, value);
editor.apply();
}
public static boolean getBoolean(String key) {
return mSp.getBoolean(key, false);
}
public static void putInt(String key, int value) {
SharedPreferences.Editor editor = mSp.edit();
editor.putInt(key, value);
editor.apply();
// boolean t = editor.commit();
}
public static int getInt(String key) {
return mSp.getInt(key, 0);
}
public static void putString(String key, String value) {
SharedPreferences.Editor editor = mSp.edit();
editor.putString(key, value);
editor.apply();
}
public static String getString(String key) {
return mSp.getString(key, null);
}
public static void deleteData(String key) {
SharedPreferences.Editor editor = mSp.edit();
editor.remove(key);
editor.apply();
}
public static void clearData(){
SharedPreferences.Editor editor = mSp.edit();
editor.clear();
editor.apply();
}
}
2.activity_main.xml
很简单的UI,一个EditText输入框,两个按钮,一个TextView显示数据
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/edit_data"
android:hint="请输入要保存的数据"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/put_data_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存数据"/>
<Button
android:id="@+id/get_data_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查看数据"/>
<TextView
android:id="@+id/data_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
/>
</LinearLayout>
3.MainActivity中使用
通过getInstances方法 实例SPUser类,
两个按钮的点击事件一个提交数据,一个获取数据
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private SPUser mSPUser;
private EditText mPutDataEdit;
private Button mPutDataButton;
private Button mGetDataButton;
private TextView mDataTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化SPUser类
mSPUser = SPUser.getInstance(this);
mPutDataEdit = findViewById(R.id.edit_data);
mPutDataButton = findViewById(R.id.put_data_button);
mPutDataButton.setOnClickListener(this);
mGetDataButton = findViewById(R.id.get_data_button);
mGetDataButton.setOnClickListener(this);
mDataTextView = findViewById(R.id.data_textview);
}
@Override
public void onClick(View view) {
if(view == mPutDataButton){
//提交数据
SPUser.putString("content", mPutDataEdit.getText().toString());
Toast.makeText(this,"保存数据成功:" + mPutDataEdit.getText().toString(), Toast.LENGTH_SHORT).show();
}else if(view == mGetDataButton){
//获取数据
String content = SPUser.getString("content");
mDataTextView.setText(content);
}
}
}
4.使用效果
5.查看数据
Android Studio 有一个Device File Explorer 的控件可以查看自己的文件(位于右下角)
找到data -> data -> 包名
双击打开就能看到我们保存的数据了
四、一个要注意的点
当你开发的时候,先用一个key保存了一个String数据类型,后面要改用其他的类型数据时,要么先将应用卸载了重新安装,要么就删除该key后,再重新创建。
总结
SharedPreferences是一个轻量级的数据库,可以适当的用于保存一些简单少量的数据,但不建议保存大量的数据。
参考文献:https://blog.csdn.net/baidu_31093133/article/details/51476726
以上是关于Android - SharePreferences数据存储的主要内容,如果未能解决你的问题,请参考以下文章
android中获取sharepreference之前 要先创建他的xml文件吗