【Android】一个好用的sharedpreferences存储类方法

其实我也不知道sharedpreferences究竟安全不安全,毕竟是android中最简单的存储机制。

如果你手机root了的话,使用MT管理器到data/data/包名/shared_prefs下就可以找到这个xml文件,而且你可以更改它的内容。

所以一般不推荐使用这种方法来存储一些比较重要的信息(密码、个人信息等等)。

因此该类只是用作演示,后期考虑使用Base64对重要信息进行加密处理。

以下是代码:

package com.paul.notebook.dataBase;

import android.content.Context;
import android.content.SearchRecentSuggestionsProvider;
import android.content.SharedPreferences;

import com.paul.notebook.LoginActivity;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * 作者:created by 巴塞罗那的余晖 on 2019/3/10 18:45
 * 邮箱:zhubaoluo@outlook.com
 * 不会写BUG的程序猿不是好程序猿,嘤嘤嘤
 */
public class userData {
    private Map<String,String> root;//用户数据根目录
    private static String flag="user_data";//标识
    private Context mcontext;
    public userData(Context context)
    {
        root=new HashMap<>();
        mcontext=context;
        readData(flag);
    }
    public boolean findExistUsername(String name)//查找是否有该用户名
    {
        return root.containsKey(name);
    }
    public boolean verifyPassword(String name,String password)//验证用户名和密码是否匹配
    {
        if(findExistUsername(name))
        {
            if(root.get(name).equals(password))
            {
                return true;
            }
        }
        return false;
    }
    public boolean getRegister(String name,String password)//注册,并返回是否注册成功
    {
        if(findExistUsername(name))
        {
            return false;
        }
        root.put(name,password);
        saveData(flag);
        return true;
    }
    private void saveData(String key)//保存数据到本地
    {
        //原理:将Map格式转换成json字符串,并指定一个特定标识来记录,Value按照发生器逐一保存就好
        JSONArray mJsonArray = new JSONArray();
        Iterator<Map.Entry<String, String>> iterator = root.entrySet().iterator();
        JSONObject object = new JSONObject();

        while (iterator.hasNext()) {
            Map.Entry<String, String> entry = iterator.next();
            try {
                object.put(entry.getKey(), entry.getValue());
            } catch (JSONException e) {
                //异常处理
                //妈咪妈咪哄!BUG快离开!
            }
        }
        mJsonArray.put(object);
        SharedPreferences sp=mcontext.getSharedPreferences("config",Context.MODE_PRIVATE);
        SharedPreferences.Editor editor=sp.edit();
        editor.putString(key,mJsonArray.toString());
        editor.commit();
    }
     private void readData(String key)//sharedpreferences从本地读取数据
    {
        root.clear();
        SharedPreferences sp=mcontext.getSharedPreferences("config",Context.MODE_PRIVATE);
        String result=sp.getString(key,"");
        try {
            JSONArray array=new JSONArray(result);
            for(int i=0;i<array.length();i++)
            {
                JSONObject itemObject =array.getJSONObject(i);
                JSONArray names=itemObject.names();
                if(names!=null)
                {
                    for(int j=0;j<names.length();j++)
                    {
                        String name=names.getString(j);
                        String value=itemObject.getString(name);
                        root.put(name,value);
                    }
                }
            }
        }catch (JSONException e){
            //异常处理
            //妈咪妈咪哄!BUG快离开!
        }
    }
    private void clearLocalData()//清除本地数据,这个方法一般用不到,故写成私有的
    {
        SharedPreferences preferences = mcontext.getSharedPreferences("config", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.clear();
        editor.commit();

    }

}

其实如果你不是存储的map类型数据,就不需要这么麻烦了,直接put就完事了。。。

下面给出sharedpreferences的一般用法:

参考这篇文章即可

【Android】一个好用的sharedpreferences存储类方法

上一篇:Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWo


下一篇:移动端H5页面的设计稿尺寸大小规范