当前位置: 移动技术网 > IT编程>开发语言>Java > SharedPreferences的基本使用

SharedPreferences的基本使用

2020年07月23日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网