• Android的本地数据


    何为本地,即写完之后除非手动修改,否像嘎了一样在那固定死了

    有些需求可能也会要求我们去写死数据,因为这需求是一成不变的,那么你通常会用什么方法写死呢?

    1. 本地存储-SharedPreferences

    此方法可以长时间保存于手机内存中,除非手动清除(更换存储数据或者手机应用管理清除数据)或者卸载应用
    常用的是存储基本数据类型,这里给存储数据类以及集合的方法,原理很简单,将数据类和集合转成String类型存起来,获取时对应的解析即可

        implementation 'com.google.code.gson:gson:2.6.2'
        implementation 'com.alibaba:fastjson:1.1.57.android'
    
    • 1
    • 2
        //存储数据类
        //用法 commitObject(key,要存的数据类)
        fun commitObject(key: String, source: Any) {
            val editor = editor.putString(key, JsonUtil.serializeAsString(source))
            commit(editor)
        }
        //获取数据类
        //用法 getObject<存起来的数据类>(key,存起来的数据类)
        fun <T> getObject(key: String, klass: Type): T? {
            val string: String = getString(key, "")
            if (string == "" || string == "\"\"") return null
            return if (string == "") {
                null
            } else {
                JsonUtil.deserializeAsObject(string, klass)
            }
        }
    
    
    
        //存储集合数据
        //用法 commitDataList(key,集合)
        fun <T> commitDataList(key: String,dataList: List<T>?) {
            if (null == dataList || dataList.size < 0) {
                return
            }
            val gson = Gson()
            val strJson = gson.toJson(dataList)
            val editor = sharePreferences.edit()
            editor.putString(key, strJson)
            editor.commit()
        }
    
        //获取集合数据
        //用法 getDataList(key, 集合的类型)
        fun <T> getDataList(key: String,cls: Class<T>?): MutableList<T> {
            val dataList: MutableList<T> = ArrayList()
            val strJson = sharePreferences.getString(key, null) ?: return dataList
            val gson = Gson()
            val myList = JsonParser().parse(strJson).asJsonArray
            for (jsonElement in myList) {
                dataList.add(gson.fromJson(jsonElement, cls))
            }
            return dataList
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    2. 常量

    经典的比如Arouter 的类前注解,统一存放在一个类里面供外部使用

    在这里插入图片描述

    3. 集合

    有些时候我们不需要去动态获取数据,只需要在app启动的时候去获取一次,那么我们就可以定义一个全局集合,将数据一开始赋值之后,供app活动期间使用,除非长期不变建议存储在-SharedPreferences,其余还是存在变量里比较好些

    4. 根据规定好的字段数据,我们直接在代码里面写死,这里的数据基本的都是以集合的形式,如果其他的建议还是常量就好了

    这里的集合不像3中的从服务端获取,可是我们直接手撕的~

    4-1 创建一个集合,我们每次new一个数据类,然后去add

    少了还行,五条以上就不建议了,首先是不美观,其他是代码量也比较大

    在这里插入图片描述

    4-2 模仿获取的服务端数据,自导自演,去解析~ 适合大量数据

    在这里插入图片描述
    在这里插入图片描述

     implementation 'com.alibaba:fastjson:1.1.57.android'
    
    • 1
        /**
         * json 转 List
         */
        public static <T> List<T> jsonToList(String jsonString, Class<T> clazz) {
            @SuppressWarnings("unchecked")
            List<T> ts = (List<T>) JSONArray.parseArray(jsonString, clazz);
            return ts;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    Web实验总
    Oracle VM VirtualBox 安装 Ubuntu Linux
    卷积神经网络(CNN)实现服装图像分类
    python基础(一)、列表的创建和操作
    线下租友陪玩搭子出租公众号开发
    Makefile总结
    用Speedtest-Tracker跟踪上网速度
    FastAdmin框架实现数据表的增删改查
    【SpringMVC】之自定义注解
    线程池的使用及ThreadPoolExecutor源码分析
  • 原文地址:https://blog.csdn.net/As_thin/article/details/132710281