GreenDao3.2.2保存List类型数据

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

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

 

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

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

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

//将实体Bean类(比如List)转化为数据库中的值(比如String)
D convertToDatabaseValue(P entityProperty);

具体实现如下所示:

public class StringConverter implements PropertyConverter, String>{

    @Override
    public List convertToEntityProperty(String databaseValue) {
        if (databaseValue == null) {
            return null;
        }
        else {
            List list = Arrays.asList(databaseValue.split(","));
            return list;
        }
    }

    @Override
    public String convertToDatabaseValue(List 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")
    @NotNull
    private String name;

    @Convert(columnType = String.class, converter = StringConverter.class)
    private List nickNames;
}

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

然后看一下布局文件:



    

        

        

        

        

最后看一下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 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

你可能感兴趣的:(android数据库)