SharedPreferences的基本使用
SharedPreferences是使用键值对来存储数据的
一、将数据存储到SharedPreferences中
得到SharedPreferences对象(这里有三种方法)
1、Context类中的getSharedPreferences()方法
参数:两个参数。①SharedPreferences文件的名称。用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences文件都是存放在/data/data//shared_prefs/目录下面; ②操作模式,目前只有MODE_PRIVATE这一种模式可选。用于指定操作模式,MODE_PRIVATE是默认的操作模式,和直接传入0效果一样,表示只有当前的应用程序才可以对这个SP文件进行读写。
2、Activity类中的getPreferences()方法
参数:一个参数,即操作模式。因为这个方法会自动将当前活动的类名作为SP的文件名。
3、PreferenceManager类中的getDefaultSharedPreferences()方法
参数:一个参数,Context参数。自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。
向SharedPreferences文件中存储数据
第一步:调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象
第二步:向SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用putBoolean()方法,添加一个字符串则使用putString()方法
第三步:调用apply()方法将添加的数据提交,完成数据存储操作
以下是SharedPreferences代码的应用:
public class NotifyAdapter extends RecyclerView.Adapter {
private LayoutInflater mInflater;
private List<PackageInfo> pkgList;
private PackageManager pm;
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
public NotifyAdapter(Context context, List<PackageInfo> pkgList) {
this.mInflater = LayoutInflater.from(context);
this.pkgList = pkgList;
this.pm = context.getPackageManager();
sharedPreferences = context.getSharedPreferences("notifyflag", Context.MODE_PRIVATE); //得到SharedPreferences对象
editor = sharedPreferences.edit(); //获取一个SharedPreferences.Editor对象
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
NotifyAdapter.ItemViewHolder ivh = new NotifyAdapter.ItemViewHolder(mInflater.inflate(R.layout.item_notifylist, viewGroup, false));
return ivh;
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int i) {
final PackageInfo packageInfo = pkgList.get(i);
ApplicationInfo appInfo = null;
try {
appInfo = pm.getApplicationInfo(packageInfo.packageName, PackageManager.GET_META_DATA);
final String appName = (String) pm.getApplicationLabel(appInfo);
Log.e("zxy","========item::appName========="+appName);
boolean notify = VNotificationManager.get().areNotificationsEnabledForPackage(packageInfo.packageName, VUserHandle.myUserId());
if(notify){
Log.e("zxy",appName + "应用通知正常显示");
}else{
Log.e("zxy",appName + "应用通知无法显示");
}
((NotifyAdapter.ItemViewHolder)viewHolder).text.setText(appName);
((ItemViewHolder) viewHolder).aSwitch.setChecked(sharedPreferences.getBoolean(appName, false));
((ItemViewHolder) viewHolder).aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
Log.e("zxy","点击了switch::"+ ((ItemViewHolder) viewHolder).text);
editor.putBoolean(appName, isChecked); //向SharedPreferences.Editor对象中添加数据
editor.apply(); //调用apply()方法将添加的数据提交,完成数据存储操作
// if(sharedPreferences.getBoolean(appName, false)){
if(isChecked){
Log.e("zxy","开启了switch");
VNotificationManager.get().setNotificationsEnabledForPackage(packageInfo.packageName, false, VUserHandle.myUserId());
}else{
Log.e("zxy","关闭了switch");
VNotificationManager.get().setNotificationsEnabledForPackage(packageInfo.packageName, true, VUserHandle.myUserId());
}
notifyDataSetChanged();
}
});
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return pkgList.size() != 0 ? pkgList.size() : 0;
}
public class ItemViewHolder extends RecyclerView.ViewHolder {
private TextView text;
private Switch aSwitch;
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
this.text = itemView.findViewById(R.id.applist_text);
this.aSwitch = itemView.findViewById(R.id.applist_switch);
}
}
}
二、从SharedPreferences中读取数据
SharedPreferences对象中提供了一系列的get方法,用于对存储的数据进行读取,每种get方法都对应了SharedPreferences.Editor中的一种put方法。比如读取一个布尔型数据就使用getBoolean()方法,读取一个字符串就使用getString()方法。
本文地址:https://blog.csdn.net/aaqian1/article/details/107408704
下一篇: 十大要素让你快速清楚如何做好品牌营销策略