使用GreenDao存储list集合数据

2023-05-16

【转载请注明出处:From李诗雨---http://blog.csdn.net/cjm2484836553/article/details/78279493】

不诗意的女程序猿不是好厨师~


点击下载Demo源代码:源码。

(不知道为什么现在csdn上传资源后,没有不需要积分就下载的选项了,没有积分的宝宝留下邮箱,我单独发给你哈~)


具体步骤:

1.GreenDao的配置 

在Project的build.gradle文件中

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.2.2'
    //GreenDao3依赖
    classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}

在module的build.gradle文件中

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin

dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
}

2.创建所需的实体类对象

@Entity
public  class TopItemBean {
/**
    * uniquekey : 8bf358dcbb02c0392e25428ec6f80707
    * title : 贵阳老太坐车丢十万元,民警调近百监控全城走访三天两夜找回
    * date : 2017-10-17 09:45
    * category : 头条
        * author_name : 贵阳晚报
    * url : http://mini.eastday.com/mobile/171017094556300.html
    * thumbnail_pic_s : http://03.imgmini.eastday.com/mobile/20171017/20171017094556_e03c77b9924d77e2f4d18b9128e7a574_4_mwpm_03200403.jpg
    * thumbnail_pic_s02 : http://03.imgmini.eastday.com/mobile/20171017/20171017094556_e03c77b9924d77e2f4d18b9128e7a574_3_mwpm_03200403.jpg
    * thumbnail_pic_s03 : http://03.imgmini.eastday.com/mobile/20171017/20171017094556_e03c77b9924d77e2f4d18b9128e7a574_1_mwpm_03200403.jpg
 */

private String uniquekey;
private String title;
private String date;
private String category;
private String author_name;
private String url;
private String thumbnail_pic_s;
private String thumbnail_pic_s02;
private String thumbnail_pic_s03;


//...
}

重新build一下工程,会自动生成以下代码:
实体类bean的构造方法和get、set方法
DaoTopItemBean、DaoTopItemBean、DAOS类

3.创建数据库

public class MyGDApplication extends Application {
private DaoSession daoSession;

@Override
public void onCreate() {
    super.onCreate();
    //设置数据库
    setMyDataBase();
}

private void setMyDataBase() {
    //创建数据库topnews.db"
    DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "topnews.db", null);
    //获取可写数据库
    SQLiteDatabase db = helper.getWritableDatabase();
    //获取数据库对象
    DaoMaster daoMaster = new DaoMaster(db);
    //获取Dao对象管理者
    daoSession = daoMaster.newSession();
}

public DaoSession getDaoSession() {
    return daoSession;
}
}

相关说明:
DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API

4.获取DaoSession并进行相关的操作
已经创建好了DaoSession和Bean对象,编译后会自动生成我们的TopItemBeanDao对象,可通过DaoSession获得:

 // get the note DAO
    DaoSession daoSession = ((MyGDApplication) getApplication()).getDaoSession();
    topItemBeanDao = daoSession.getTopItemBeanDao();

联网获取数据成功后, 采用挨个遍历的方式将集合数据存储到数据库中。

//联网成功的数据保存到数据库中
    //遍历数组保存数据
    topItemBeanDao.deleteAll();
    if(topList!=null&&topList.size()>0) {
        for (int i=0;i<topList.size();i++){
            TopItemBean topItemBean = topList.get(i);
            topItemBeanDao.insert(topItemBean);
        }
    }

当没有网络时,去数据库查询所有数据,并显示

    //联网获取数据失败,则去数据库中取集合数据
    // query all notes, sorted a-z by their text
    notesQuery = topItemBeanDao.queryBuilder().build();
    List<TopItemBean> dbTopList = notesQuery.list();

    //重新装配数据并刷新
    topListContainer.clear();
    topListContainer.addAll(dbTopList);
    litePalRvAdapter.updateTopData(topListContainer);

检测:关闭手机网络,再次进入应用,发现页面会涛声依旧的显示出来,则保存到数据库成功。

?如果含自定义的类怎么办呢?

从网上看到一个很好的处理办法: 使用json!json作为客户端和服务端之间数据传递的载体,不仅能满足我们现在的业务需求,而且我们还有gson这个解析框架来帮我们做转换!简直不要更简单。 举个例子:

public class OtherBean {
@Id(autoincrement = true)
private Long id;

@Property
private Long otherBeanId;

@Property
private Long zoneId;

@Property
@Convert(converter = UserConverter.class, columnType = String.class)
private User user;

public static class UserConverter implements PropertyConverter<User, String> {
    @Override
    public User convertToEntityProperty(String databaseValue) {
        if (databaseValue == null) {
            return null;
        }
        return new Gson().fromJson(databaseValue, User.class);
    }

    @Override
    public String convertToDatabaseValue(User entityProperty) {
        if (entityProperty == null) {
            return null;
        }
        return new Gson().toJson(entityProperty);
    }
}
}


积累点滴,做好自己!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用GreenDao存储list集合数据 的相关文章

  • SharePoint:如何从列表模板创建新列表?

    我已经根据问题列表创建了一个列表模板 并将其保存在列表模板库中 现在如何基于此模板创建新列表 string internalName MyListTemplateName SPListTemplate t null foreach SPLi
  • 二维列表转 csv - 按列

    我想将 2D 列表的内容导出到 csv 文件中 子列表的大小可以不同 例如 二维列表可以是这样的 a a b c d e f g h i 我希望我的 csv 存储这样的数据 按列 a e g h b f i c d 我是否必须添加一些空格才
  • 如何在Python中手动对数字列表进行排序?

    规格 Ubuntu 13 04 Python 3 3 1 背景 Python的初学者 遇到了这个 手动排序 问题 我被要求做的事情 让用户输入 3 个数值并将它们存储在 3 个不同的变量中 不使用列表或排序算法 手动将这 3 个数字从小到大
  • 如何在 git 中仅获取唯一的提交

    我想获取所有分支中唯一提交的列表 但是如果有人在分支中使用 rebase 则会提交松散的父项 如何解决这个问题呢 如何获取进行独特更改的提交列表 I use git log oneline graph cherry pick left ri
  • 在python中将列表转换为字符串

    我对 python 语言相当陌生 我一直在寻找这个问题的答案 我需要一个如下所示的列表 Kevin went to his computer He sat down He fell asleep 转换为如下字符串 Kevin went to
  • 多个列表和大小的所有可能排列

    在 python 中使用以下命令很容易计算简单的排列itertools permutations https docs python org 3 library itertools html itertools permutations 你
  • 如何将嵌套的数字列表转换为字符串列表?

    我有下面的列表 p 1 2 3 4 2 3 4 1 如何将子列表放入字符串中 例如 期望的结果是 p 1234 2341 可以通过将每个整数转换为字符串并连接字符串来完成 p join map str sub list for sub li
  • 计算列表中的子列表

    L 2 4 5 6 2 1 6 6 3 2 4 5 3 4 5 我想知道任意子序列出现了多少次 s 2 4 5 例如会返回2次 I tried L count s 但它不起作用 因为我认为它期望寻找类似的东西 random numbers
  • Python 两个列表之间的多重条件

    我正在使用 python 3 我需要检查不同列表中的 3 个变量 我想打印数据 如果username age lang与其他列表不同 这是我的代码 list1 list2 list1 append username alice age 25
  • 如何对 glob.glob 进行数字排序?

    我在一个文件夹中有一堆按数字排序的文件 当我尝试对 glob glob 进行排序时 我从来没有以正确的顺序获得文件 文件示例和预期输出排序 folder C Users user Desktop folder 1 sample mp3 C
  • 将 for 循环转换为列表理解

    我有一个for循环 将字符串列表中每个元素的子字符串与另一个字符串列表中的元素进行比较 mylist for x in list1 mat False for y in list2 if x 14 in y mat True if not
  • 测试 python 列表的所有元素是否为 False

    如何返回False如果所有元素都在列表中False 给定的列表是 data False False False Using any https docs python org 2 library functions html any gt
  • 将由空格分隔的整数字符串更改为 int 列表[重复]

    这个问题在这里已经有答案了 我该如何做类似的东西 x 1 2 3 45 87 65 6 8 gt gt gt foo x 1 2 3 45 87 65 6 8 我完全陷入困境 如果我按索引执行此操作 那么超过 1 位数字的数字将被分解 请帮
  • 在 Python 中获取数组作为 GET 查询参数

    我知道在 php 中我可以使用 GET key1 key2 检索以数组形式发送的 GET 数据 但这在 Python 中是可能的 因为我只收到一个字符串 但它不被识别为数组 列表 如果重要的话我使用flask werkzeug 参数名称的深
  • 在 R 中垂直绘制表 kable::extra 和 kable 的列表?

    我需要绘制表格列表一个在另一个之下 显示垂直 有任何想法吗 问题从这里开始 https stackoverflow com questions 73867229 plot a list of tables in a single table
  • C++ std::list:迭代时擦除/删除元素[重复]

    这个问题在这里已经有答案了 可能的重复 您可以在迭代 std list 时从其中删除元素吗 https stackoverflow com questions 596162 can you remove elements from a st
  • 了解 Scala 中的中缀方法调用和缺点运算符(::)

    我对 Scala 编程语言相当陌生 当我遵循以下网站的讲义时 我正在尝试一些萦绕在我脑海中的东西 here http horstmann com sjsu cs152 04 closures1 html 我想我无法真正理解 cons 运算符
  • 查找字典中列表的最大值

    我有一个字典 每个键后面都有一个存储的列表 看起来像这样 dict with values u New York u New York u NY datetime datetime 2014 8 13 0 0 10 u New York u
  • 将嵌套列表转换为嵌套列表

    我知道可以将项目列表从一种类型转换为另一种类型 但是如何将嵌套列表转换为嵌套 List 已经尝试过的解决方案 List
  • 如何在 Python 中使用 .format() 打印“for”循环中的列表?

    我是 Python 新手 我正在编写一段非常简单的代码 使用 for 循环打印列表的内容 format 我想要如下的输出 但我收到此错误 names David Peter Michael John Bob for i in names p

随机推荐