android自定义参数类型转换,Android-Room自定义类型

前言

通常情况下,数据库存储的是基本类型float,int,String等。但是有时需要存储自定义类型,比如Date,或者我们自定义的类。如果想在数据库中存储这样的值,我们就需要通知Room如何将我们自定义的类型转换为原始类型。

Type Converter

@Entity

public class Company {

@PrimaryKey(autoGenerate = true)

private int id;

private String name;

private int age;

private String address;

private double salary;

private Date createDate;

//构造方法的参数名要与字段名相同

//否则会提示param不匹配

public Company(String name, int age, String address, double salary,Date createDate) {

this.name = name;

this.age = age;

this.address = address;

this.salary = salary;

this.createDate=createDate;

}

//省略了getter/setter方法

}

除了之前的字段外,我又添加了createDate字段,这是日期类型,如果想在数据库中存储它,这时候我们就需要创建类型转换器。

public class DateConverter {

@TypeConverter

public static Date revertDate(long value) {

return new Date(value);

}

@TypeConverter

public static long converterDate(Date value) {

return value.getTime();

}

}

在这个类中,我们使用了@TypeConverter,converterDate将Date转换成数据库可以保存的类型,revertDate将数据库保存的值转换成Date。

这样我们就可以使用该类了。

@Database(entities = {Department.class, Company.class}, version = 1, exportSchema = false)

@TypeConverters(DateConverter.class)

public abstract class DepartmentDatabase extends RoomDatabase {

...

}

如图,我们已经将Date插入到了数据库,并且通过查询拿出来。

除了将@TypeConverters放在RoomDatabase里面,还可以将它放在具体的Dao上面,但是这样只会影响到该Dao的方法。

通过@TypeConverters类型转换器,我们能够将非原始类型的值保存到数据库中。未完待续

你可能感兴趣的:(android自定义参数类型转换,Android-Room自定义类型)