当前位置:   article > 正文

Android - SharePreferences数据存储的简单使用_应用sharedprefence的存储方式

应用sharedprefence的存储方式

SharedPreferences的简单使用


小柴的笔记

Date:2021/6/7 20:00

一、SharedPreferences

SharedPrefences是一个轻量级的数据库,存储方式是以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,也会检查磁盘上的文件是否被修改
Java代码

	private static final String SP_FILE_NAME = "sp_file";
	private SharedPreferences mSp;
	mSp = context.getSharedPreferences(SP_FILE_NAME, Context.MODE_PRIVATE);
  • 1
  • 2
  • 3

通过Activity.getSharedPreferences(int mode)方法创建
该方法的作用和上面的意义,只不过该文件名字是将该Activity的类名作为文件名

2、创建SharedPreferences.Edit()对象

	SharedPreferences.Editor editor = mSp.edit();
  • 1

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);
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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();
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

5、apply() 和 commit()的区别

	void apply()
	boolean commit()
	
  • 1
  • 2
  • 3

apply()方法没有返回值,将数据先提交到内存,再异步进行写入磁盘,当apply写入内存后,还没写入磁盘的时候,是有可能后面又有数据写入,将前面apply()写入内存的数据覆盖。所以适合写入频率快的时候,性能比commit()快。

commit()有boolean返回值,返回true就是写入成功是将数据同步写入磁盘,后面又数据来,也得等当前数据结束了,再保存后面的数据,需要等待,所以相对来说性能不如apply()

6、SharedPreferences.getXXX()获取数据

	mSp.getInt(key, 0);
	mSp.getString(key, null);
	mSp.getBoolean(key, false);
	mSp.getFloat(key, 0);
	mSp.getLong(key, 0);
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三、简单的使用方法

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) {
    	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();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

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>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

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){
            //提交数据
            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);
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

4.使用效果

SharePreferences的使用

四、Kotlin的使用方法

	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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

五、查看数据

Android Studio 有一个Device File Explorer 的控件可以查看自己的文件(位于右下角)
在这里插入图片描述
找到data -> data -> 包名
在这里插入图片描述
双击打开就能看到我们保存的数据了
在这里插入图片描述

六、一个要注意的点

当你开发的时候,先用一个key保存了一个String数据类型,后面要改用其他的类型数据时,要么先将应用卸载了重新安装,要么就删除该key后,再重新创建。

总结

SharedPreferences是一个轻量级的数据库,可以适当的用于保存一些简单少量的数据,但不建议保存大量的数据。

源码点这里


参考文献:https://blog.csdn.net/baidu_31093133/article/details/51476726

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/cp456/article/detail/60745
推荐阅读
相关标签
  

闽ICP备14008679号