如果想要在应用程序重启之后还保持已经修改好的值,一般需要进行数据的存储。
一.SharedPreferences
1.基本介绍:
轻量级数据库,常用在应用中,主要保存一些常用配置,比如登录信息应用的主题设置等
2.使用方法:
A. 定义SharedPreferences.Editor变量:
SharedPreferences.Editor editor = getContext().getSharedPreferences("my_sharedPreferences", Context.MODE_PRIVATE).edit();
my_sharedPreferences为保存的SharedPreferences文件名
B.存入键值对:
editor.putString("sharedPreferences_value", data);
sharedPreferences_value是键值对的名称,data是值,由于使用的是putString所以data应当是string型的。除此之外可以使用getBoolean,getInt,getFloat和getLong
C. 提交:editor.apply();
D.使用前先定义SharedPreferences变量:
SharedPreferences pref = getContext().getSharedPreferences("my_sharedPreferences", Context.MODE_PRIVATE);
引号中的文件名是步骤a中的文件名
E.使用合适的变量接收get过来的数据:
mData = pref.getString("sharedPreferences_value", defaultData);
defaultData是默认情况下sharedPreferences_value的值,如果找不到sharedPreferences_value值就返回defaultData。
大致的示例:
import android.content.SharedPreferences;
public void modifyAndSaveData(String s){
string data = s;
SharedPreferences.Editor editor = getContext().getSharedPreferences("my_sharedPreferences", Context.MODE_PRIVATE).edit();
editor.putString("sharedPreferences_value", data);
editor.apply();
}
public void useNewDate(){
String defaultData = "defalt status";
SharedPreferences pref = getContext().getSharedPreferences("my_sharedPreferences",
Context.MODE_PRIVATE);
String mData = pref.getString("sharedPreferences_value", defaultData);
}
二.Settings.Global
Settings.Global 是 Android 系统级别的设置存储,主要用于存储一些系统级别的配置信息,如音量、屏幕超时等。
使用方法:
1.获取Settings.Global的值
使用Settings.Global.getXxx(Xxx是基本类型数据),以int和String类型举例:
int value = Settings.Global.getInt(getContext().getContentResolver(), "my_data", 0);
其中 "my_data"是开发者自己命名的,系统会新建一个名为"my_data"的文件,然后把值放进去,0是默认值,如果"my_data"文件里面没有值则使用0。
getInt是有默认值的,但是getString是没有默认值的:
String s = Settings.Global.getString(getContext().getContentResolver(), "my_string_data");
如果文件中没有内容,则s的值是null。
2.存放值
使用Settings.Global.putXxx(Xxx是基本类型数据),以int和String类型举例:
int num = 2024;
Settings.Global.putInt(context.getContentResolver(), "my_data", num);
String date = "20240308"
Settings.Global.putString(context.getContentResolver(), "my_value_data", date);
由于Settings.Global是可以设置全局的值的,所以理论上是可以不同包中的类中读取和存储值的,只要文件名一致即可。
举例如下:
package com.android.systemui.statusbar.phone;
puclic class A {
int num = 2024;
Settings.Global.putInt(context.getContentResolver(), "my_data", num);
String date = "20240308"
Settings.Global.putString(context.getContentResolver(), "my_value_data", date);
}
//在另一个package下可以直接使用
package com.androd.systemui.statusbar.policy;
puclic class B {
int value = Settings.Global.getInt(getContext().getContentResolver(), "my_data", 0);
String s = Settings.Global.getString(getContext().getContentResolver(), "my_string_data");
}
以上代码均实测有效,如有错误烦请指正。