Android Studio 之 SharedPrefences 数据持久性保存

SharedPreferences 会在应用包目录中生成一个xml文件,将数据保存在里面

可以实现数据持久性保存。

创建的数据,保存在 Data -> Data -> 包名 -> shared_prefs 文件夹中

实例化接口的时候:

1. 不指定文件名,直接保存在 MainActivity.xml 文件中    

SharedPreferences shp = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = shp.edit();
editor.putInt("number",100); //将100保存到 number 这个key中
editor.apply(); //提交:或editor.commit()但是建议用 apply()它是非同步的方式,避免冲突,允许多部件 同时进行读写

  

2.指定文件名

//下面这句直接把这个数值保存到 My_Data.xml 文件中
SharedPreferences shp2 = getSharedPreferences("MY_DATA",Context.MODE_PRIVATE);
SharedPreferences.Editor editor2 = shp2.edit();
editor2.putInt("number2",200); //将200保存到 number2 这个key中
editor2.apply(); //提交:或editor.commit()但是建议用 apply()它是非同步的方式,避免冲突,允许多部件 同时进行读写

  

3.读取内容

SharedPreferences shp2 = getSharedPreferences("MY_DATA",Context.MODE_PRIVATE);
int number2 = shp2.getInt("number2",0);//读取key为number2的值,如果读不到默认为0
Log.d(TAG,String.valueOf(number2));

  

1.在 MainActivity中直接操作 Sharedpreferences 

package com.example.sharedpreferences;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    String TAG = "myTag";

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

        /*
        * Activity 和 getPreferences 都因为继承自 Context,所以在这个类中,可以直接访问
        *
        * 如果在 其他类中要访问 getPreferences,需要在其他类中传递一个Context参数
        * 使这个类具备访问Activity全局的能力
        * */

        //SharedPreferences 是一个接口
        //这里参数是一个常量 , 直接保存到 Data 目录中的 MainActivity.xml 文件中
        SharedPreferences shp = getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = shp.edit();
        editor.putInt("number",100); //将100保存到 number 这个key中
        editor.apply(); //提交:或editor.commit()但是建议用 apply()它是非同步的方式,避免冲突,允许多部件 同时进行读写

        //读取
        int number = shp.getInt("number",0); //读取key为number的值,如果读不到默认为0
        Log.d(TAG,String.valueOf(number));

        //下面这句直接把这个数值保存到 My_Data.xml 文件中
        SharedPreferences shp2 = getSharedPreferences("MY_DATA",Context.MODE_PRIVATE);
        SharedPreferences.Editor editor2 = shp2.edit();
        editor2.putInt("number2",200); //将200保存到 number2 这个key中
        editor2.apply(); //提交:或editor.commit()但是建议用 apply()它是非同步的方式,避免冲突,允许多部件 同时进行读写

        int number2 = shp2.getInt("number2",0);//读取key为number2的值,如果读不到默认为0
        Log.d(TAG,String.valueOf(number2));




        //从 其他类中 操作 SharedPreferences
        //构造函数中的参数,//不能直接用this,如果当窗口翻转,Activity 重建,会导致泄露
        //用全局有效的 getApplicationContext()
        MyDataMng myDataMng = new MyDataMng(getApplicationContext());
        myDataMng.save();
        myDataMng.load();

        Log.d(TAG,"myDataMng->userName=" + myDataMng.userName);
    }
}

  

2.在其他类中操作 Sharedpreferences 

package com.example.sharedpreferences;

import android.content.Context;
import android.content.SharedPreferences;

public class MyDataMng {
    public int number;
    public String userName;
    private Context context;
    //在构造函数中传进来Context这个参数
    public MyDataMng(Context context){
        this.context = context;
    }
    public void save(){
        //创建文件:myName.xml
        String myName= context.getResources().getString(R.string.MyName);
        SharedPreferences  shp = context.getSharedPreferences(myName,Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = shp.edit();
        //将数据放在 UserName 这个key 中
        String userNameValue = context.getResources().getString(R.string.UserNameValue);
        editor.putString("UserNameValue",userNameValue);
        editor.apply();
    }

    public String load(){
        String myName= context.getResources().getString(R.string.MyName);
        SharedPreferences  shp = context.getSharedPreferences(myName,Context.MODE_PRIVATE);//读取 myName.xml 这个文件

        //读取userName 这个节点
        userName = shp.getString("UserNameValue","无名");
        return userName;
    }
}

  

原文地址:https://www.cnblogs.com/gfwei/p/11781050.html