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;
    }
相关推荐
用户2018792831678 小时前
通俗易懂的讲解:Android系统启动全流程与Launcher诞生记
android
二流小码农8 小时前
鸿蒙开发:资讯项目实战之项目框架设计
android·ios·harmonyos
用户2018792831679 小时前
WMS 的核心成员和窗口添加过程
android
用户20187928316710 小时前
PMS 创建之“软件包管理超级工厂”的建设
android
用户20187928316710 小时前
通俗易懂的讲解:Android APK 解析的故事
android
渣渣_Maxz10 小时前
使用 antlr 打造 Android 动态逻辑判断能力
android·设计模式
Android研究员10 小时前
HarmonyOS实战:List拖拽位置交换的多种实现方式
android·ios·harmonyos
guiyanakaung10 小时前
一篇文章让你学会 Compose Multiplatform 推荐的桌面应用打包工具 Conveyor
android·windows·macos
恋猫de小郭10 小时前
Flutter 应该如何实现 iOS 26 的 Liquid Glass ,它为什么很难?
android·前端·flutter
葱段10 小时前
【Compose】Android Compose 监听TextField粘贴事件
android·kotlin·jetbrains