I am using date converter class to convert my date object. However, I still encounter an error saying. error: Cannot figure out how to save this field into a database. You can consider adding a type converter for it.
My Date Converter class
public class DateConverter {
@TypeConverter
public static Date toDate(Long dateLong){
return dateLong == null ? null: new Date(dateLong);
}
@TypeConverter
public static long fromDate(Date date){
return date == null ? null :date.getTime();
}
}
My Database table for using the date object.
@Entity(tableName = "userFitnessDailyRecords")
@TypeConverters(DateConverter.class)
public class UserFitnessDailyRecords {
@NonNull
@PrimaryKey(autoGenerate = true)
public int id;
public Date forDay;
public Date getForDay() {
return forDay;
}
public void setForDay(Date forDay) {
this.forDay = forDay;
}
}
I followed the example from google code persistence labs and from commonwares room respective GitHub example. I am using room version 1.0.0.
See my complete example.
Refer to the documentation : https://developer.android.com/training/data-storage/room/referencing-data
Then map it to the database.
And the entity.
I had this same problem (how to store time to Room), but I was using
Calendar
, so I made this: [note: This anwer is for Calendar]edit: the main reason for this answer is that
Date
is deprecated, so here you goYou can write it on Kotlin as well
AndroidThreeTen is the port of Java8 new time classes, which unfortunately are available only for api>=26. Using https://github.com/JakeWharton/ThreeTenABP , we can use LocalDateTime on all versions of Android. Here in kotlin the converter,
which, as other good answers already said, it's declared on the Database abstract class:
Using
Calendar
with Kotlin (adapted from O95's answer):Put converter class in class of data base, not in the model :