欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SharedPreferences的基本使用

程序员文章站 2022-12-30 22:52:08
SharedPreferences是使用键值对来存储数据的一、将数据存储到SharedPreferences中得到SharedPreferences对象(这里有三种方法)1、Context类中的getSharedPreferences()方法参数:两个参数。①SharedPreferences文件的名称。用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences文件都是存放在/data/data//shared_prefs/目录下面;...

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