GreenDao保存List<String>类型数据
来源:互联网 发布:人脸识别算法 opencv 编辑:程序博客网 时间:2024/06/14 06:08
**在上一章中介绍了如何简单使用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);
具体实现如下所示:
package com.example.extdannyjiang.greendaodemo.utils;import org.greenrobot.greendao.converter.PropertyConverter;import java.util.Arrays;import java.util.List;/** * Created by danny.jiang on 17/6/20. */public class StringConverter implements PropertyConverter<List<String>, String>{ @Override public List<String> convertToEntityProperty(String databaseValue) { if (databaseValue == null) { return null; } else { List<String> list = Arrays.asList(databaseValue.split(",")); return list; } } @Override public 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帮我们生成代码的beanpublic class User { @Id(autoincrement = true) private Long id; @Property(nameInDb = "user_name") @NotNull private 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"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/editUserName" android:hint="please input user name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/editUserNickName1" android:hint="please input user name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/editUserNickName2" android:hint="please input user name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:text="创建数据库" android:onClick="createDatabase" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android: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; @Override protected 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(); } }
具体使用方式,可以参考GreenDaoDemo : GreenDaoDemo
阅读全文
8 0
- GreenDao保存List<String>类型数据
- GreenDao保存List<String>类型数据
- android数据保存之greendao
- [Android]用SharedPreferences保存List<Map<String, String>>数据
- 用SharedPreferences保存List(Map(String, String))数据
- GreenDao存储list集合数据
- mybatis返回list<String>类型数据
- GreenDao存集合类型数据
- android sharedpreferences 保存 list<Map<String,Object>>数据
- Retrofit+GreenDao请求数据保存数据库
- 如何将String[]类型的数据保存到数据库里
- 使用GreenDao存储list集合数据
- OGNL表达式循环List<String[]>类型数据的方法
- String类型转List<String>
- 本地保存List(Map(String, String))数据及JSON的一些用法
- 将List<Map<String,String>>中的数据输出保存到TXT文本文件中
- 将List<Map<String,String>>中的数据输出保存到TXT文本文件中
- Android保存List<Map<String,Object>>数据到SD卡及读取
- Ubuntu libreoffice去除英文红色下划线
- Spring AOP的简单介绍
- jsp-九大对象
- 大数据操作:删除和去重
- 基于ArcGIS Engine+C#开发问题(3)
- GreenDao保存List<String>类型数据
- json文件获取不到数据报404错误的可能原因
- Strom+Kafka + redis实时计算单词出现频率的案例
- [Unity]绘制扇形图形
- 模拟斗地主洗牌和发牌,牌没有排序 看牌时有顺序
- Zabbix-windows
- ListView的多条目展示
- 关于HTTP协议,一篇就够了
- Dell PowerEdge RAID控制器存在一个潜在问题