房间ORM枚举类型转换器错误

时间:2017-11-22 13:15:17

标签: android enums orm android-room

我一直收到以下错误:

  

无法弄清楚如何将此字段保存到数据库中。您可以   考虑为它添加一个类型转换器。

我已将@TypeConverter添加到我的数据库类的转换器方法对和@TypeConverters注释中。

DownloadItem.java

  @Entity(tableName = "downloads")
    public class DownloadItem implements Serializable {

        public enum DownloadStatus {
            None(0),
            Downloading(1),
            Suspended(2),
            Completed(3),
            Deleted(4),
            Expired(5);

            private final int numeral;

            @TypeConverter
            public static DownloadStatus getDownloadStatus(int numeral){
                for(DownloadStatus ds : values()){
                    if(ds.numeral == numeral){
                        return ds;
                    }
                }
                return null;
            }

            @TypeConverter
            public static Integer getDownloadStatusInt(DownloadStatus status){
                return status.numeral;
            }

            DownloadStatus(int num){
                this.numeral = num;
            }
        }

        @TypeConverters(DownloadStatus.class)
        @ColumnInfo(name = "download_status")
        public DownloadStatus downloadStatus;

        @PrimaryKey
        @NonNull
        private int contentId;

       @Ignore
        public DownloadItem() {
        }

     public DownloadItem(DownloadStatus downloadStatus, int contentId) {
            this.downloadStatus = downloadStatus;
            this.contentId = contentId;
        }
      }

DownloadDatabase.java

    @Database(entities = {DownloadItem.class}, version = 1)
@TypeConverters({DownloadItem.DownloadStatus.class, PlayerType.class})
public abstract class DownloadDatabase extends RoomDatabase {

    public abstract DownloadItemStore downloadItemStore();

    private static final String DB_NAME = "download.db";
.......
}

1 个答案:

答案 0 :(得分:3)

getDownloadStatusInt

应为int,而不是Integer