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; } }