赞
踩
Date:2021/6/7 20:00
SharedPrefences是一个轻量级的数据库,存储方式是以XML文件的形式来保存的,数据格式是以 Key - Value 键值对的方式存储的,常用于保存一些状态值,适合保存少量数据,并不适合保存大量数据。支持存储的数据类型是:boolean、float、int、long、String、StringSet
通过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,也会检查磁盘上的文件是否被修改
Java代码
private static final String SP_FILE_NAME = "sp_file";
private SharedPreferences mSp;
mSp = context.getSharedPreferences(SP_FILE_NAME, Context.MODE_PRIVATE);
通过Activity.getSharedPreferences(int mode)方法创建
该方法的作用和上面的意义,只不过该文件名字是将该Activity的类名作为文件名
SharedPreferences.Editor editor = mSp.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);
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();
void apply()
boolean commit()
apply()方法没有返回值,将数据先提交到内存,再异步进行写入磁盘,当apply写入内存后,还没写入磁盘的时候,是有可能后面又有数据写入,将前面apply()写入内存的数据覆盖。所以适合写入频率快的时候,性能比commit()快。
commit()有boolean返回值,返回true就是写入成功是将数据同步写入磁盘,后面又数据来,也得等当前数据结束了,再保存后面的数据,需要等待,所以相对来说性能不如apply()
mSp.getInt(key, 0);
mSp.getString(key, null);
mSp.getBoolean(key, false);
mSp.getFloat(key, 0);
mSp.getLong(key, 0);
//删除名为key的数据
SharedPreferences.Editor editor = mSp.edit();
editor.remove(String key);
editor.apply();
//清空全部数据
SharedPreferences.Editor editor = mSp.edit();
editor.clear();
editor.apply();
比较简单,一个创建单例的方法,一个创建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) { context = context.getApplicationContext(); 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 void putBoolean(String key, boolean value) { SharedPreferences.Editor editor = mSp.edit(); editor.putBoolean(key, value); editor.apply(); } public boolean getBoolean(String key) { return mSp.getBoolean(key, false); } public void putInt(String key, int value) { SharedPreferences.Editor editor = mSp.edit(); editor.putInt(key, value); editor.apply(); // boolean t = editor.commit(); } public int getInt(String key) { return mSp.getInt(key, 0); } public void putString(String key, String value) { SharedPreferences.Editor editor = mSp.edit(); editor.putString(key, value); editor.apply(); } public String getString(String key) { return mSp.getString(key, null); } public void deleteData(String key) { SharedPreferences.Editor editor = mSp.edit(); editor.remove(key); editor.apply(); } public void clearData(){ SharedPreferences.Editor editor = mSp.edit(); editor.clear(); editor.apply(); } }
很简单的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>
通过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){ //提交数据 mSPUser.putString("content", mPutDataEdit.getText().toString()); Toast.makeText(this,"保存数据成功:" + mPutDataEdit.getText().toString(), Toast.LENGTH_SHORT).show(); }else if(view == mGetDataButton){ //获取数据 String content = mSPUser.getString("content"); mDataTextView.setText(content); } } }
val editor = getSharedPreferences("data", Context.MODE_PRIVATE).edit()
editor.putString("name", "Tom")
editor.putInt("age", 18)
editor.putBoolean("isBoy", true)
editor.apply()
val isSuccess = editor.commit()
val prefs = getSharedPreferences("data", Context.MODE_PRIVATE)
val name = prefs.getString("name", "")
val age = prefs.getInt("age", 0)
val isBoy = prefs.getBoolean("isBoy", false)
Log.d("小柴的回忆", "name is $name")
Log.d("小柴的回忆", "age is $age")
Log.d("小柴的回忆", "isBoy is $isBoy")
Android Studio 有一个Device File Explorer 的控件可以查看自己的文件(位于右下角)
找到data -> data -> 包名
双击打开就能看到我们保存的数据了
当你开发的时候,先用一个key保存了一个String数据类型,后面要改用其他的类型数据时,要么先将应用卸载了重新安装,要么就删除该key后,再重新创建。
SharedPreferences是一个轻量级的数据库,可以适当的用于保存一些简单少量的数据,但不建议保存大量的数据。
参考文献:https://blog.csdn.net/baidu_31093133/article/details/51476726
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。