zoukankan      html  css  js  c++  java
  • Android教程 -09 数据的持久化存储

    视频为本篇播客知识点讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷

    任何一个程序其实说白了就是在不停地和数据打交道,数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证及时手机关机的情况下,这些数据仍然不会丢失。
    Android中存储方式有五种:

    1. 使用SharedPreferences存储数据
    2. 文件存储数据
    3. SQLite数据库存储数据
    4. 使用ContentProvider存储数据
    5. 网络存储数据

    SharedPreferences存储数据

    适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口 令密码等

    核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。

    创建SharedPreferences的方法:

    Context getSharedPreferences()    
    Activity getPreferences()  
    PreferenceManager  getDefaultSharedPreference()

    SharedPreferences使用方法:

    edit() 开始编辑
    apply()commit() 提交数据
    getXXX() 获取数据
    public class MainActivity extends AppCompatActivity {
        private EditText editText;
        // sp保存数据
        SharedPreferences config;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 创建SP
            config = getSharedPreferences("config", MODE_PRIVATE);
            editText = (EditText) findViewById(R.id.editText);
            // 读取保存的数据  写入到editText
            // 取数据   参数2为 如果找不到"data"key值,默认返回的数据
            String data=config.getString("data","");
            editText.setText(data);
        }
        /**按钮点击事件*/
        public void saveData(View v) {
            // 1 获取输入的内容
            String data = editText.getText().toString();
            // 2获取到了编辑器
            SharedPreferences.Editor edit = config.edit();
            // 3 保存数据  key -value
            edit.putString("data",data);
            //4 保存到文件中
            //edit.commit(); // 效率慢
            edit.apply();  // 效率快
        }
    }

    看到上面的代码,我们就可以做保存密码的实际案例了:
    这里写图片描述

    视频为本篇播客知识点讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷

    MD5加密

    上面的Demo,我们保存了密码,一般在实际开发的过程中,保存密码都不要保存明文, 很容易被别人窃取密码, 一般都对密码进行加密
    常见的加密方式为MD5加密

    视频为本篇播客知识点讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷

    public class MD5Utils {
        /**
         * 对密码进行加密
         * @param password  要加密的密码
         * @return  密文
         */
        public static String digest(String password){
            try {
                //加密方式为MD5加密
                MessageDigest digest=MessageDigest.getInstance("MD5");
                // 把一个byte数组 转换成加密后byte数组
                byte[] bytes = digest.digest(password.getBytes());
                StringBuilder sb=new StringBuilder();
                for(byte b:bytes){
                    // 去掉负数
                    int c=b&0xff;  // 负数转换成正数   // 加盐
                    String result=Integer.toHexString(c)+3;// 把10进制的数 转换成16进制的数 0 255
                    if(result.length()<2){
                        sb.append("0");// 让十六进制数 全部都是两位数
                    }
                    sb.append(result);
                }
                return sb.toString();  // 把加密后的密文返回回去
    
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
                // can't reach
                return "";
            }
        }
    
    

    MD5加密是不可逆的加密算法, 只能 明文->密文 密文是不能转换成明文的, 银行卡密码都是采用MD5加密的,但是银行卡密码都是用md5加密后的密文再进行加密,反复几十次,基本上保证密码非常安全。

    未完待续…..

  • 相关阅读:
    递归
    pull 一下新的多继承 姿势
    OnDestroy()里的一些思考。----以及对“”不使用的对象应手动赋值为null” 的正确理解姿势
    为什么要用Volley中的RequestFuture封装RxJava来用异步请求处理同步请求?
    安卓 摇一摇 包含 objectAnimator valueAnimator的动画效果
    三个问题
    状态栏透明而实现 "沉浸式" 及兼容问题
    RecycleView GridLayoutManager 分割线
    项目随笔之大小系列:px,sp,dp;java设置大小(LayoutParams)
    安卓开发中getString()
  • 原文地址:https://www.cnblogs.com/hehe520/p/6329907.html
Copyright © 2011-2022 走看看