日付オブジェクトを変換するために、日付コンバータークラスを使用しています。ただし、まだエラーが発生します。エラー:このフィールドをデータベースに保存する方法がわかりません。タイプコンバーターを追加することを検討できます。
My Date Converterクラス
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();
}
}
日付オブジェクトを使用するためのマイデータベーステーブル
@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;
}
}
Googleのコード永続性ラボとGitHubの各サンプルのコモンウェアルームの例に従いました。ルームバージョン1.0.0を使用しています。
DateからLong(ラッパー)およびlong(primitive)からDateに変換しています。 Longに変更してコンパイルしました。また、コンバータでnullをアンボックスすると、NPEが生成されます。
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();
}
}
私はこれと同じ問題(部屋に時間を保存する方法)がありましたが、Calendar
を使用していたので、これを作成しました:[note:このanwer is forCalendar ]
@TypeConverter
public static Calendar toCalendar(Long l) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(l);
return c;
}
@TypeConverter
public static Long fromCalendar(Calendar c){
return c == null ? null : c.getTime().getTime();
}
モデルではなく、データベースのクラスにコンバータークラスを配置します。
@Database(entities = {
Patient.class,Medicine.class,Tooth.class,})
@TypeConverters({TimeConverter.class,OutBoundConverter.class})
public abstract class PatientDataBase extends RoomDatabase {//your data base}
私の完全な例を参照してください。
ドキュメントを参照してください: https://developer.Android.com/training/data-storage/room/referencing-data
public class Converters {
@TypeConverter
public static Date fromTimestamp(Long value) {
return value == null ? null : new Date(value);
}
@TypeConverter
public static Long dateToTimestamp(Date date) {
return date == null ? null : date.getTime();
}
}
次に、データベースにマップします。
@Database(entities = {User.class}, version = 1)
@TypeConverters({Converters.class})
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
そしてエンティティ。
@Entity
public class User {
private Date birthday;
}
KotlinでCalendar
を使用する(O95の回答から適応):
@TypeConverter
fun toCalendar(l: Long?): Calendar? =
if (l == null) null else Calendar.getInstance().apply { timeInMillis = l }
@TypeConverter
fun fromCalendar(c: Calendar?): Long? = c?.time?.time