Android 中最简单的数据存储方式 : SharedPreferences
SharedPreferences 数据存储处理实际上时对一个个key——value 数据对的处理
使用SharedPreferences 保存key-value 对的一般步骤:
1. 使用Activity 类 的 getSharePreferences方法获取SharePreferences 对象,指定文件名和访问权限
2.获得SharePreferences.Editor 对象,并调用该对象的putXXX 方法保存key-value 对
3. 通过SharePreferences.Editor 的commit 方法提交保存 key-value 对
示例一:
认识并使用
1 package com.example.sharedpreferences; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.content.Context; 6 import android.content.SharedPreferences; 7 import android.os.Bundle; 8 import android.util.Log; 9 10 11 public class MainActivity extends AppCompatActivity { 12 13 @Override 14 protected void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.activity_main); 17 18 //SharedPreferences 接口 19 21 // 一个参数 22 SharedPreferences shp=getPreferences(Context.MODE_PRIVATE); 23 SharedPreferences.Editor editor=shp.edit() ; 24 editor.putInt("NUMBER",100); // key -value 25 //均可 提交 26 //editor.commit(); 27 //非同步提交 28 editor.apply(); 29 30 int x =shp.getInt("NUMBER",0); 31 String TAG="mylog"; 32 Log.d(TAG, "onCreate: "+x); 33 34 35 } 36 }
运行程序之后,找到设备存储位置
打开 Mainactivity .xml 该文件名为默认的
会找到命名为 NUMBER 的 int 类型数据 数值为100
1 <?xml version='1.0' encoding='utf-8' standalone='yes' ?> 2 <map> 3 <int name="NUMBER" value="100" /> 4 </map>
2.使用 getSharedPreferences 方法
1 package com.example.sharedpreferences; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.content.Context; 6 import android.content.SharedPreferences; 7 import android.os.Bundle; 8 import android.util.Log; 9 10 11 public class MainActivity extends AppCompatActivity { 12 13 @Override 14 protected void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.activity_main); 17 18 //SharedPreferences 接口 19 //两个参数 20 SharedPreferences shp = getSharedPreferences("MY_data",Context.MODE_PRIVATE); 21 // 一个参数 22 // SharedPreferences shp=getPreferences(Context.MODE_PRIVATE); 23 SharedPreferences.Editor editor=shp.edit() ; 24 editor.putInt("NUMBER",6 00); // key -value 25 //均可 提交 26 //editor.commit(); 27 //非同步提交 28 editor.apply(); 29 30 int x =shp.getInt("NUMBER",0); 31 String TAG="mylog"; 32 Log.d(TAG, "onCreate: "+x); 33 34 35 } 36 }
存储为自定义名称的 xml 文件
2. 创建一个专门的数据类来管理数据
MyData类
1 package com.example.sharedpreferences; 2 3 import android.content.Context; 4 import android.content.SharedPreferences; 5 6 public class MyData { 7 8 public int number; 9 10 private Context context; 11 public MyData(Context context){ 12 this.context=context; 13 } 14 15 public void save(){ 16 String name=context.getResources().getString(R.string.MY_data); 17 SharedPreferences shp= context.getSharedPreferences(name,Context.MODE_PRIVATE); 18 SharedPreferences.Editor editor=shp.edit(); 19 String key=context.getResources().getString(R.string.MY_KEY); 20 editor.putInt(key,number); 21 editor.apply(); 22 }; 23 24 public int load(){ //读取 25 String name=context.getResources().getString(R.string.MY_data); 26 SharedPreferences shp= context.getSharedPreferences(name,Context.MODE_PRIVATE); 27 String key=context.getResources().getString(R.string.MY_KEY); 28 //defValue : 缺省值 29 int x=shp.getInt(key,context.getResources().getInteger(R.integer.defValue)); 30 number=x; 31 return x; 32 33 } 34 35 }
MainActivity.java
1 package com.example.sharedpreferences; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.content.Context; 6 import android.content.SharedPreferences; 7 import android.os.Bundle; 8 import android.util.Log; 9 10 11 public class MainActivity extends AppCompatActivity { 12 13 @Override 14 protected void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.activity_main); 17 // 不好 this 表示 activity 的引用 有可能导致内存泄漏 activity 经常被摧毁重建 18 // MyData myData = new MyData(this); 19 // ApplicationContext() 可以理解为指向app的*引用 单个 永远存在的单例 20 MyData myData = new MyData(getApplicationContext()); 21 22 myData.number=1000; 23 myData.save(); 24 int y=myData.load(); 25 String TAG="mylog"; 26 Log.d(TAG, "onCreate: "+y); 27 28 29 30 //SharedPreferences 接口 31 //两个参数 32 /* SharedPreferences shp = getSharedPreferences("MY_data",Context.MODE_PRIVATE); 33 // 一个参数 34 // SharedPreferences shp=getPreferences(Context.MODE_PRIVATE); 35 SharedPreferences.Editor editor=shp.edit() ; 36 editor.putInt("NUMBER",600); // key -value 37 //均可 提交 38 //editor.commit(); 39 //非同步提交 40 editor.apply(); 41 42 int x =shp.getInt("NUMBER",0); 43 String TAG="mylog"; 44 Log.d(TAG, "onCreate: "+x);*/ 45 46 47 48 49 } 50 }
在编写程序当中,将某些变量设置在Resource 的Values 目录当中,便于数据管理,提高程序的可维护性
string.xml
<resources> <string name="app_name">SharedPreferences</string> <string name="MY_data">my_data</string> <string name="MY_KEY">my_key</string> </resources>
int.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <integer name="defValue">0</integer> 4 </resources>