Room系列专题

Android Jetpack之Room篇

Room Entity注解说明

Room Dao注解说明

Room Fts 虚拟表模块

Room DatabaseView 视图

Room SkipQueryVerification

Room TypeConverter 属性类型转换器

TypeConverter

将方法标记为类型转换器。一个类可以有任意多个@TypeConverter方法。

每个转换器方法应该接收一个具有非空返回类型的参数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
public static class Converters {
    @TypeConverter
    public Date fromTimestamp(Long value) {
      return value == null ? null : new Date(value);
    }
 
    @TypeConverter
    public Long dateToTimestamp(Date date) {
      if (date == null) {
        return null;
      } else {
        return date.getTime();
      }
    }
}

TypeConverters

指定 Room 可以使用的其他类型转换器。TypeConverter被添加到元素的范围中,因此如果将它放在类/接口上,该类中的所有方法/字段都能够使用转换器。

  • 如果您将它放在 Database 上,该数据库中的所有Daos和实体都可以使用它。
  • 如果你把它放在 Dao 上,Dao中的所有方法都可以使用它。
  • 如果你把它放在一个 Entity 上,实体的所有字段都可以使用它。
  • 如果你把它放在POJO上,POJO的所有字段都可以使用它。
  • 如果你把它放在一个 Entity 字段上,只有这个字段可以使用它。
  • 如果你把它放在一个 Dao 方法上,这个方法的所有参数都可以使用它。
  • 如果你把它放在一个 Dao 方法参数上,那么这个字段就可以使用它。

字段定义

1
2
3
4
5
6
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.CLASS)
public @interface TypeConverters {
    //
    Class<?>[] value();
}

例子

1
2
3
4
5
@Database(entities = {User.class}, version = 1)
@TypeConverters({Converters.class})
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

如果你喜欢我的文章,可以关注我的掘金、公众号、博客、简书或者Github!

简书: https://www.jianshu.com/u/a2591ab8eed2

GitHub: https://github.com/bugyun

Blog: https://ruoyun.vip

掘金: https://juejin.im/user/56cbef3b816dfa0059e330a8/posts

CSDN: https://blog.csdn.net/zxloveooo

欢迎关注微信公众号