Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Room ORM enum type converter error

I keep getting the following error:

Cannot figure out how to save this field into database. You can consider adding a type converter for it.

I have added the @TypeConverter to the pair of converter methods and @TypeConverters annotation on my database class.

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";
.......
}
like image 645
galaxigirl Avatar asked Nov 22 '17 13:11

galaxigirl


1 Answers

It should be int, not Integer for getDownloadStatusInt

like image 63
Alex Cohn Avatar answered Oct 19 '22 18:10

Alex Cohn