Android Studio SharedPreferences

  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>

猜你喜欢

转载自www.cnblogs.com/cxy0210/p/12337321.html