Android的本地数据

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

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

1. 本地存储-SharedPreferences

此方法可以长时间保存于手机内存中,除非手动清除(更换存储数据或者手机应用管理清除数据)或者卸载应用

常用的是存储基本数据类型,这里给存储数据类以及集合的方法,原理很简单,将数据类和集合转成String类型存起来,获取时对应的解析即可

kotlin 复制代码
    implementation 'com.google.code.gson:gson:2.6.2'
    implementation 'com.alibaba:fastjson:1.1.57.android'
kotlin 复制代码
    //存储数据类
    //用法 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
    }

2. 常量

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

3. 集合

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

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

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

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

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

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


kotlin 复制代码
 implementation 'com.alibaba:fastjson:1.1.57.android'
java 复制代码
    /**
     * json 转 List<T>
     */
    public static <T> List<T> jsonToList(String jsonString, Class<T> clazz) {
        @SuppressWarnings("unchecked")
        List<T> ts = (List<T>) JSONArray.parseArray(jsonString, clazz);
        return ts;
    }
相关推荐
数智工坊3 小时前
机器人运动控制:采样、优化与学习三大流派深度对比与实战
android·学习·机器人
故渊at5 小时前
第二板块:Android 四大组件标准化学理 | 第八篇:Service 后台执行实体与优先级
android·gitee·service·前台服务·后台服务
会Tk矩阵群控的小木5 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发
qeen876 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
故渊at6 小时前
第二板块:Android 四大组件标准化学理 | 第九篇:BroadcastReceiver 事件分发与有序广播
android·gitee·broadcast·广播·动态注册·静态注册
JohnnyDeng946 小时前
【Android】Room 数据库高级用法与性能调优:从查询瓶颈到毫秒级响应
android·性能优化·kotlin·room
zeqinjie6 小时前
Flutter 折叠屏 iPad / 宽屏适配实践
android·前端·flutter
ab_dg_dp6 小时前
Android 17+ 提取 AIDL 生成 Java 文件的实用脚本
android·java·python
Arrom7 小时前
DLNA 渲染端排障实战:从 20s 卡顿到 stale subscriber 的两周追凶之旅
android·java