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

原创粉丝点击