1.使用Glide库提取视频帧
图片加载框架Glide就可以做到获取本地视频的缩略图(不能获取网络视频文件):
1 | String filePath = "/storage/emulated/0/Pictures/example_video.mp4"; |
泛型相关
通过反射获取一个Field对象的泛型类型
1 | /** |
TypeToken
解析泛型Json
1 | //构造泛型Json |
ParameterizedType
假设不只一个json数组字符串需要你解析,很显然重复的代码应该抽象成一个方法。 关于Student的数组:
1 | [ |
关于Book的数组
1 | [ |
抽象一个泛型的方法出来,把json数组字符串转化成类。
第一次尝试
1 | public <T> List<T> parseString2List(String json){ |
报错了,fromJson不支持使用泛型解析。
第二次尝试
1 | public <T> List<T> parseString2List(String json) { |
嗯,没有报错,我们运行时断点看看list里的数据类型。
我们通过这句话调用方法:
1 | List<Student> list = parseString2List(jsonString); |
可以看到,list中的数据类型不是Student,而是LinkedTreeMap,LinkedTreeMap是Gson库内部数据模型,换句话说我们的解析失败了,尝试着将parseString2List方法中的泛型T去掉,运行结果一样,说明Gson解析时不支持泛型。
第三次尝试
1 | public <T> List<T> parseString2List(String json,Class clazz) { |
在调用的地方使用:
1 | List<Student> list = parseString2List(jsonString, Student.class); |
现在在回过头来看看,ParameterizedType的几个方法的含义吧,以HashMap<String,Integer>为例。
- getActualTypeArguments 返回实际类型组成的数据,即new Type[]{String.class,Integer.class}
- getRawType 返回原生类型,即 HashMap
- getOwnerType 返回 Type 对象,表示此类型是其成员之一的类型。例如,如果此类型为 O
.I ,则返回 O的表示形式。 如果此类型为顶层类型,则返回 null。这里就直接返回null就行了。