何为本地,即写完之后除非手动修改,否像嘎了一样在那固定死了
在实际安卓开发中,这种写死的概念必不可少,如控件的id,某一常量,Kotlin中的Val
当然,有些需求可能也会要求我们去写死数据,因为这需求是一成不变的,那么你通常会用什么方法写死呢?
1. 本地存储-SharedPreferences
此方法可以长时间保存于手机内存中,除非手动清除(更换存储数据或者手机应用管理清除数据)或者卸载应用
常用的是存储基本数据类型,这里给存储数据类以及集合的方法,原理很简单,将数据类和集合转成String类型存起来,获取时对应的解析即可
implementation 'com.google.code.gson:gson:2.6.2'
implementation 'com.alibaba:fastjson:1.1.57.android'
//存储数据类
//用法 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 模仿获取的服务端数据,自导自演,去解析~ 适合大量数据
implementation 'com.alibaba:fastjson:1.1.57.android'
/**
* 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;
}