diff --git a/example/src/main/java/com/example/models/EnumModel.java b/example/src/main/java/com/example/models/EnumModel.java new file mode 100644 index 00000000..17ee5ae0 --- /dev/null +++ b/example/src/main/java/com/example/models/EnumModel.java @@ -0,0 +1,46 @@ +package com.example.models; + +import com.orm.SugarRecord; + +public class EnumModel extends SugarRecord { + public static enum DefaultEnum { + ONE, TWO + } + + public static enum OverrideEnum { + ONE, TWO; + + @Override + public String toString() { + return super.toString().toLowerCase(); + } + } + + private OverrideEnum overrideEnum; + private DefaultEnum defaultEnum; + + public EnumModel() { + + } + + public EnumModel(OverrideEnum e1, DefaultEnum d1) { + overrideEnum = e1; + defaultEnum = d1; + } + + public DefaultEnum getDefaultEnum() { + return defaultEnum; + } + + public void setDefaultEnum(DefaultEnum defaultEnum) { + this.defaultEnum = defaultEnum; + } + + public void setOverrideEnum(OverrideEnum overrideEnum) { + this.overrideEnum = overrideEnum; + } + + public OverrideEnum getOverrideEnum() { + return overrideEnum; + } +} diff --git a/example/src/test/java/com/example/sugartest/EnumFieldTests.java b/example/src/test/java/com/example/sugartest/EnumFieldTests.java new file mode 100644 index 00000000..e6716751 --- /dev/null +++ b/example/src/test/java/com/example/sugartest/EnumFieldTests.java @@ -0,0 +1,34 @@ +package com.example.sugartest; + +import com.example.models.EnumModel; +import com.orm.SugarRecord; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.annotation.Config; + +import static com.orm.SugarRecord.save; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(RobolectricGradleTestRunner.class) +@Config(emulateSdk = 18) +public class EnumFieldTests { + + @Test + public void defaultEnums() { + save(new EnumModel(EnumModel.OverrideEnum.ONE, EnumModel.DefaultEnum.TWO)); + EnumModel model = SugarRecord.findById(EnumModel.class, 1); + assertNotNull(model); + assertEquals(model.getDefaultEnum(), EnumModel.DefaultEnum.TWO); + } + + @Test + public void overridenEnums() { + save(new EnumModel(EnumModel.OverrideEnum.ONE, EnumModel.DefaultEnum.TWO)); + EnumModel model = SugarRecord.findById(EnumModel.class, 1); + assertNotNull(model); + assertEquals(model.getOverrideEnum(), EnumModel.OverrideEnum.ONE); + } + +} diff --git a/library/src/main/java/com/orm/util/ReflectionUtil.java b/library/src/main/java/com/orm/util/ReflectionUtil.java index 5f8dcf31..c27ec355 100644 --- a/library/src/main/java/com/orm/util/ReflectionUtil.java +++ b/library/src/main/java/com/orm/util/ReflectionUtil.java @@ -61,7 +61,7 @@ private static List getAllFields(List fields, Class type) { } public static void addFieldValueToColumn(ContentValues values, Field column, Object object, - Map entitiesMap) { + Map entitiesMap) { column.setAccessible(true); Class columnType = column.getType(); try { @@ -132,6 +132,8 @@ public static void addFieldValueToColumn(ContentValues values, Field column, Obj } else { if (columnValue == null) { values.putNull(columnName); + } else if (columnType.isEnum()) { + values.put(columnName, ((Enum) columnValue).name()); } else { values.put(columnName, String.valueOf(columnValue)); } @@ -217,7 +219,7 @@ public static void setFieldValueFromCursor(Cursor cursor, Field field, Object ob Log.e("field set error", e.getMessage()); } } - + private static Field getDeepField(String fieldName, Class type) throws NoSuchFieldException { try { Field field = type.getDeclaredField(fieldName);