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;
    }
相关推荐
移动开发者1号4 分钟前
Kotlin协程与响应式编程深度对比
android·kotlin
花花鱼9 小时前
android studio 设置让开发更加的方便,比如可以查看变量的类型,参数的名称等等
android·ide·android studio
alexhilton11 小时前
为什么你的App总是忘记所有事情
android·kotlin·android jetpack
AirDroid_cn14 小时前
OPPO手机怎样被其他手机远程控制?两台OPPO手机如何相互远程控制?
android·windows·ios·智能手机·iphone·远程工作·远程控制
尊治14 小时前
手机电工仿真软件更新了
android
xiangzhihong817 小时前
使用Universal Links与Android App Links实现网页无缝跳转至应用
android·ios
车载应用猿18 小时前
基于Android14的CarService 启动流程分析
android
没有了遇见18 小时前
Android 渐变色实现总结
android
雨白21 小时前
Jetpack系列(四):精通WorkManager,让后台任务不再失控
android·android jetpack
mmoyula1 天前
【RK3568 驱动开发:实现一个最基础的网络设备】
android·linux·驱动开发