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;
}
}
浙公网安备 33010602011771号