
正文
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 对
示例一:
认识并使用
package com.example.sharedpreferences; import androidx.appcompat.app.AppCompatActivity; import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //SharedPreferences 接口
// 一个参数
SharedPreferences shp=getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor=shp.edit() ;
editor.putInt("NUMBER",100); // key -value
//均可 提交
//editor.commit();
//非同步提交
editor.apply(); int x =shp.getInt("NUMBER",0);
String TAG="mylog";
Log.d(TAG, "onCreate: "+x); }
}
运行程序之后,找到设备存储位置
打开 Mainactivity .xml 该文件名为默认的
会找到命名为 NUMBER 的 int 类型数据 数值为100
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<int name="NUMBER" value="100" />
</map>
2.使用 getSharedPreferences 方法
package com.example.sharedpreferences; import androidx.appcompat.app.AppCompatActivity; import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //SharedPreferences 接口
//两个参数
SharedPreferences shp = getSharedPreferences("MY_data",Context.MODE_PRIVATE);
// 一个参数
// SharedPreferences shp=getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor=shp.edit() ;
editor.putInt("NUMBER",6 00); // key -value
//均可 提交
//editor.commit();
//非同步提交
editor.apply(); int x =shp.getInt("NUMBER",0);
String TAG="mylog";
Log.d(TAG, "onCreate: "+x); }
}
存储为自定义名称的 xml 文件
2. 创建一个专门的数据类来管理数据
MyData类
package com.example.sharedpreferences; import android.content.Context;
import android.content.SharedPreferences; public class MyData { public int number; private Context context;
public MyData(Context context){
this.context=context;
} public void save(){
String name=context.getResources().getString(R.string.MY_data);
SharedPreferences shp= context.getSharedPreferences(name,Context.MODE_PRIVATE);
SharedPreferences.Editor editor=shp.edit();
String key=context.getResources().getString(R.string.MY_KEY);
editor.putInt(key,number);
editor.apply();
}; public int load(){ //读取
String name=context.getResources().getString(R.string.MY_data);
SharedPreferences shp= context.getSharedPreferences(name,Context.MODE_PRIVATE);
String key=context.getResources().getString(R.string.MY_KEY);
//defValue : 缺省值
int x=shp.getInt(key,context.getResources().getInteger(R.integer.defValue));
number=x;
return x; } }
MainActivity.java
package com.example.sharedpreferences; import androidx.appcompat.app.AppCompatActivity; import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 不好 this 表示 activity 的引用 有可能导致内存泄漏 activity 经常被摧毁重建
// MyData myData = new MyData(this);
// ApplicationContext() 可以理解为指向app的顶级引用 单个 永远存在的单例
MyData myData = new MyData(getApplicationContext()); myData.number=1000;
myData.save();
int y=myData.load();
String TAG="mylog";
Log.d(TAG, "onCreate: "+y); //SharedPreferences 接口
//两个参数
/* SharedPreferences shp = getSharedPreferences("MY_data",Context.MODE_PRIVATE);
// 一个参数
// SharedPreferences shp=getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor=shp.edit() ;
editor.putInt("NUMBER",600); // key -value
//均可 提交
//editor.commit();
//非同步提交
editor.apply(); int x =shp.getInt("NUMBER",0);
String TAG="mylog";
Log.d(TAG, "onCreate: "+x);*/ }
}
在编写程序当中,将某些变量设置在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
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="defValue">0</integer>
</resources>







