GreenDao

简介

数据库存储数据基本上每个APP都有用到,GreenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案,至于用法这里不再多少,网上有很资料,这里主要说一下,利用GreenDao保存JavaBean类型或者List类型的数据。

举个栗子

{

rating: {

max: 10,

average: 7.9,

stars: "40",

min: 0

},

genres: [

"动作",

"奇幻",

"冒险"

],

title: "海王",

casts: [

{

alt: "https://movie.douban.com/celebrity/1022614/",

avatars: {

small: "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p32853.webp",

large: "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p32853.webp",

medium: "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p32853.webp"

},

name: "杰森·莫玛",

id: "1022614"

},

{

alt: "https://movie.douban.com/celebrity/1044702/",

avatars: {

small: "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34697.webp",

large: "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34697.webp",

medium: "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34697.webp"

},

name: "艾梅柏·希尔德",

id: "1044702"

},

{

alt: "https://movie.douban.com/celebrity/1010539/",

avatars: {

small: "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9206.webp",

large: "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9206.webp",

medium: "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9206.webp"

},

name: "威廉·达福",

id: "1010539"

}

],

collect_count: 397576,

original_title: "Aquaman",

subtype: "movie",

directors: [

{

alt: "https://movie.douban.com/celebrity/1032122/",

avatars: {

small: "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1509950363.8.webp",

large: "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1509950363.8.webp",

medium: "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1509950363.8.webp"

},

name: "温子仁",

id: "1032122"

}

],

year: "2018",

images: {

small: "http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2541280047.webp",

large: "http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2541280047.webp",

medium: "http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2541280047.webp"

},

alt: "https://movie.douban.com/subject/3878007/",

id: "3878007"

}

上面是豆瓣电影一个电影详情的数据,一般复杂,有一些套嵌JsonObject和JsonArray,数据库存储的都是基本类型,像上面那些objec或者array类型又改如何存到数据库中,这是个问题。GreenDao为我们提了一个解决方案,就是把这些数据统一都转成String类型,存到数据库中,用的时候再转成相应的类型。

具体分析

这里分别列数两个例子,一个是JsonObject, 一个是JsonArray的。

首先第一个字段rating,电影的评分,返回的是一个JsonObject,写出它的JavaBean

package com.zs.project.bean.movie;

import java.io.Serializable;

/**

* Created by zs

* Date:2018年 01月 17日

* Time:15:20

* —————————————————————————————————————

* About: 电影评分

* —————————————————————————————————————

*/

public class MovieRating implements Serializable {

private int max;

private float average;

private int stars;

private int min;

public int getMax() {

return max;

}

public void setMax(int max) {

this.max = max;

}

public float getAverage() {

return average;

}

public void setAverage(float average) {

this.average = average;

}

public int getStars() {

return stars;

}

public void setStars(int stars) {

this.stars = stars;

}

public int getMin() {

return min;

}

public void setMin(int min) {

this.min = min;

}

@Override

public String toString() {

return "MovieRating{" +

"max=" + max +

", average=" + average +

", stars=" + stars +

", min=" + min +

'}';

}

}

然后,写它的转换类MovieRatingConvert, 这里是用到的fastJson解析的,用Gson当然也是可以的,这个转换类实现的PropertyConverter接口,里面有两个方法,很好理解,String转JavaBean 和JavaBean转String。

package com.zs.project.greendao.convert;

import com.alibaba.fastjson.JSON;

import com.zs.project.bean.movie.MovieRating;

import org.greenrobot.greendao.converter.PropertyConverter;

/**

* Created by zs

* Date:2018年 12月 10日

* Time:17:05

* —————————————————————————————————————

* About: 评分

* —————————————————————————————————————

*/

public class MovieRatingConvert implements PropertyConverter{

@Override

public MovieRating convertToEntityProperty(String databaseValue) {

return JSON.parseObject(databaseValue , MovieRating.class);

}

@Override

public String convertToDatabaseValue(MovieRating entityProperty) {

return JSON.toJSONString(entityProperty);

}

}

下面是电影的主演casts字段,返回的是一个JsonArray,同样是写它的JavaBean和转换类MovieCastsConvert

package com.zs.project.bean.movie;

import java.io.Serializable;

/**

* Created by zs

* Date:2018年 01月 17日

* Time:15:17

* —————————————————————————————————————

* About: 主演 | 导演

* —————————————————————————————————————

*/

public class MovieCasts implements Serializable{

private String alt;

private MovieImages avatars;

private String name;

private String id;

public String getAlt() {

return alt;

}

public void setAlt(String alt) {

this.alt = alt;

}

public MovieImages getAvatars() {

return avatars;

}

public void setAvatars(MovieImages avatars) {

this.avatars = avatars;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

@Override

public String toString() {

return "MovieCasts{" +

"alt='" + alt + '\'' +

", avatars=" + avatars +

", name='" + name + '\'' +

", id='" + id + '\'' +

'}';

}

}

package com.zs.project.greendao.convert;

import com.alibaba.fastjson.JSON;

import com.zs.project.bean.movie.MovieCasts;

import org.greenrobot.greendao.converter.PropertyConverter;

import java.util.List;

/**

* Created by zs

* Date:2018年 12月 10日

* Time:17:07

* —————————————————————————————————————

* About:

* —————————————————————————————————————

*/

public class MovieCastsConvert implements PropertyConverter, String>{

@Override

public List convertToEntityProperty(String databaseValue) {

return JSON.parseArray(databaseValue , MovieCasts.class);

}

@Override

public String convertToDatabaseValue(List entityProperty) {

return JSON.toJSONString(entityProperty);

}

}

这些都写完了,就是把他们都用在整个详情的Bean里面了。

@Id(autoincrement = true)

private Long id;

private String title;

@Convert(converter = MovieRatingConvert.class , columnType = String.class)

private MovieRating rating;

private String year;

@Convert(converter = MovieImagesConvert.class , columnType = String.class)

private MovieImages images;

private String alt;

private String mobile_url;

private String share_url;

private String schedule_url;

private String collect_count;

private String comments_count;

private String ratings_count;

private String original_title;

private String summary;

@Convert(converter = StringConvert.class , columnType = String.class)

private List countries;

@Convert(converter = StringConvert.class , columnType = String.class)

private List genres;

@Convert(converter = StringConvert.class , columnType = String.class)

private List aka;

@Convert(converter = MovieCastsConvert.class , columnType = String.class)

private List casts;

@Convert(converter = MovieCastsConvert.class , columnType = String.class)

private List directors;

@Convert(converter = MovieRatingConvert.class , columnType = String.class)

private MovieRating rating;

@Convert(converter = MovieCastsConvert.class , columnType = String.class)

private List casts;

用到了这个Convert注解,表明它们的转换类,这样就可以转换成String保存到数据库中了

android bean对象,Android GreenDao 保存 JavaBean 或者List JavaBean类型数据相关推荐

  1. android drawable 对象,Android Drawable开发简介

    Drawable 是"可绘制的东西"的抽象类,被定义在 android.graphics.drawable 包下. Drawable 类继承了很多代表不同形状的子类,例如 Bitm ...

  2. android bundle 对象,Android Bundle传递对象

    首先Android的Bundle是可以传递对象的.我们可以用Bundle b = new Bundle():b.putSerializable("key", 对象引用); 但是这样 ...

  3. java对象转json字符串日期格式_fastJSON字符串类型数据中的日期转换为Java bean的日期对象...

    fastJSON字符串类型数据中的日期转换为Java bean的日期对象 Person.java import java.io.Serializable; import java.util.Date; ...

  4. android bitmap对象,android 创建bitmap的多种方式

    –Bitmap代表这一张位图,BitmapDrawable里封装的图片就是一个Bitmap对象.如果要将Bitmap对象封装成BitmapDrawable对象只需要用构造方法即可. //讲bitmap ...

  5. android 判断对象,Android网络判断知识小结

    Android中判断当前网络是否可用 应用场景:实现判断当前网络是否可用 当前有可用网络,如下图: 当前没有可用网络,如下图: 实现步骤: 1.获取ConnectivityManager对象 Cont ...

  6. android parcelable 对象,Android实现Parcelable对象序列化的实例

    Android实现Parcelable对象序列化的实例 bundle.putParcelable可以实现传递对象,但是这个对象的类必须实现Parcelable接口才能够使用. 下面是一个简单的在Act ...

  7. android 保存对象,使用sharedpreferences在Android存储对象 -解道Jdon

    使用SharedPreferences在Android存储对象 为什么不用SQLite? 原因多种:除了面向对象和关系数据库之间的阻抗不匹配时,SQLite可能是矫枉过正(带来了更多的开销)对于一些简 ...

  8. 《Android 开源库》 GreenDAO 用法详解(译文)

    简介 greenDAO是一个开源的Android ORM,使SQLite数据库的开发再次变得有趣. 它减轻了开发人员处理底层的数据库需求,同时节省开发时间. SQLite是一个很不错的关系型数据库. ...

  9. Android ORM 框架之 greenDAO 使用心得

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM  ...

最新文章

  1. 网站SEO优化值得收藏的技巧介绍
  2. jQuery技术内幕电子版4
  3. Understand one Simple Factory Pattern
  4. u盘安装Fedora18
  5. python dropna失败_使用Python部署机器学习模型的10个实践经验
  6. 高嘌呤食物搜索引擎_“高嘌呤”的食物已发现,尿酸高的人,要尽量挑着吃!...
  7. Leetcode--210.课程表Ⅱ
  8. 软件开发丨关于软件重构的灵魂四问
  9. sqlserver中的dateadd和datediff
  10. 计算机组成原理—高速缓冲存储器
  11. fastjson SerializerFeature
  12. 大话数据结构PDF/word
  13. 系统设计=基于表面肌电信号的不同手势识别【MATLAB】
  14. mocano editor中使用代码比对功能
  15. WebUI自动化测试框架搭建从0到1(完整源码)更新完毕
  16. 电脑硬盘损坏如何修复?自己动手就能解决
  17. 从Transformer、BERT到GPT2和XLNet:高端玩家如何用论文互怼
  18. oracle18c静默安装教程,CentOS7无图形化界面静默安装oracle18c
  19. 中年男人,你如何自我救赎
  20. 就是要弄懂你之—— 同步 异步 阻塞 非阻塞

热门文章

  1. 关于pwd的含义及用法
  2. 高通临时首席财务官戴夫·怀斯宣布退休;东芝着手开始研究5bit PLC闪存颗粒;激烈争夺,腾讯SaaS加速器首期成员公布……...
  3. CSS:CSS层叠样式表的概述
  4. Cisco Packet Tracer 思科中交换机端口安全配置与风暴控制
  5. 自动化测试平台(二):开发用户认证接口
  6. python取矩阵的某一行_Pythonnumpy提取矩阵的某一行或某一列的实例
  7. [笔试] 查找兄弟单词(2012/5/6 百度实习笔试题)
  8. LINQ To SQL與Transaction
  9. 各位老铁接住啦!UB又双叒叕来搞事情
  10. 公众号点击图片变成另一张_公众号互动内容:小众潮流or下一个风口?