GreenDao3.2.2保存ListString类型数据

2024-02-28 12:08

本文主要是介绍GreenDao3.2.2保存ListString类型数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Android框架之GreenDao3.2.2的使用中,介绍了如何简单使用GreenDao,并创建了User类来保存一些简单的数据。 

但是假如在User中有一种List类型的数据也需要保存到数据库中,该如何处理呢?

 

答案很简单,可以转换一下思路,遍历List数据,然后将所有的String对象都append到一个StringBuilder中,然后保存在数据库中即可。 
事实上,GreenDao已经为我们考虑到了这种情况,因此才有了 PropertyConverter 这个接口

在PropertyConverter接口中,有两个需要实现的抽象方法

//将数据库中的值,转化为实体Bean类对象(比如List<String>)
P convertToEntityProperty(D databaseValue);//将实体Bean类(比如List<String>)转化为数据库中的值(比如String)
D convertToDatabaseValue(P entityProperty);

具体实现如下所示:

public class StringConverter implements PropertyConverter<List<String>, String>{@Overridepublic List<String> convertToEntityProperty(String databaseValue) {if (databaseValue == null) {return null;}else {List<String> list = Arrays.asList(databaseValue.split(","));return list;}}@Overridepublic String convertToDatabaseValue(List<String> entityProperty) {if(entityProperty==null){return null;}else{StringBuilder sb= new StringBuilder();for(String link:entityProperty){sb.append(link);sb.append(",");}return sb.toString();}}
}

具体使用

首先创建User对象,如下所示:

@Entity   //  用于标识这是一个需要Greendao帮我们生成代码的bean
public class User {@Id(autoincrement = true)private Long id;@Property(nameInDb = "user_name")@NotNullprivate String name;@Convert(columnType = String.class, converter = StringConverter.class)private List<String> nickNames;
}

以上代码的nickNames是一个List< String > 类型,因此需要使用Converter进行转化,具体指定Converter的方法就是添加@Converter注解。 User写好之后,可以编译一下工程,然后studio会为我们自动创建UserDao类

然后看一下布局文件:

<?xml version="1.0" encoding="utf-8"?>
<ScrollViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><EditTextandroid:id="@+id/editUserName"android:hint="please input user name"android:layout_width="match_parent"android:layout_height="wrap_content" /><EditTextandroid:id="@+id/editUserNickName1"android:hint="please input user name"android:layout_width="match_parent"android:layout_height="wrap_content" /><EditTextandroid:id="@+id/editUserNickName2"android:hint="please input user name"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:text="创建数据库"android:onClick="createDatabase"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:text="插入数据"android:onClick="insert"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>
</ScrollView>

最后看一下MainActivity.java中的关键代码:

public class MainActivity extends AppCompatActivity {private EditText editName;private EditText editNickName1;private EditText editNickName2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editName = ((EditText) findViewById(R.id.editUserName));editNickName1 = ((EditText) findViewById(R.id.editUserNickName1));editNickName2 = ((EditText) findViewById(R.id.editUserNickName2));}
}/**
* 点击创建数据库Button时,调用此方法创建数据库
*/public void createDatabase(View view) {DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "user.db");daoMaster = new DaoMaster(helper.getWritableDb());daoSession = daoMaster.newSession();userDao = daoSession.getUserDao();orderDao = daoSession.getMyOrderDao();}/**
* 点击插入数据Button时,调用此方法插入一条User数据
*/public void insert(View view) {User user = new User();user.setName(editName.getText().toString());List<String> nickNames = new ArrayList<>();String nickName1 = editNickName1.getText().toString();String nickName2 = editNickName2.getText().toString();nickNames.add(nickName1);nickNames.add(nickName2);user.setNickNames(nickNames);long insertID = userDao.insert(user);if (insertID >= 0) {Toast.makeText(this, "插入 User 成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "插入User 失败", Toast.LENGTH_SHORT).show();}}

具体使用方式,可以参考GreenDaoDemos : GreenDaoDemos

这篇关于GreenDao3.2.2保存ListString类型数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/755458

相关文章

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate