Я не уверен, что суета о Комнате, поскольку я нахожу это очень дерьмовым. Почти ничего не работает, как ожидалось. К моей проблеме я хочу проверить, что у них есть конвертер типов (пока что разочарован). Чтобы проверить это, я сделал простой урок из примера, который я видел онлайн. Я уверен, что это что-то глупое, даже не связанное с кодом, но я все равно попробую здесь. Пока что у меня есть:
@Entity
public class User {
@PrimaryKey
private int id;
private String name;
@TypeConverters(Converters.class)
List<String> pets = new ArrayList<>();
public User() { }
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getPets() {
return pets;
}
public void setPets(List<String> pets) {
this.pets = pets;
}
}
Тогда конвертер:
public class Converters {
@TypeConverter
public static ArrayList<String> fromString(String value) {
Type listType = new TypeToken<ArrayList<String>>() {}.getType();
return new Gson().fromJson(value, listType);
}
@TypeConverter
public static String fromArrayList(ArrayList<String> list) {
Gson gson = new Gson();
String json = gson.toJson(list);
return json;
}
}
Простой дао:
@Dao
public interface UserDao {
@Insert(onConflict = REPLACE)
void insertUser(User user);
@Query("SELECT * FROM User")
List<User> getUsers();
}
И, наконец, БД:
@Database(entities = { User.class,}, version = 1, exportSchema = false)
@TypeConverters({Converters.class})
public abstract class RoomDb extends RoomDatabase {
public abstract UserDao userDao();
}
И все же я получаю "Не могу понять, как сохранить это поле в базе данных. Вы можете рассмотреть вопрос о добавлении преобразователя типа для него" дерьмо. Никаких подробностей, почему не работает конвертер или что так когда-либо. Чтобы избежать неприятностей, я уже пытался использовать @Converters в поле, которое само по себе предлагает альтернативное решение.
Комната до сих пор разочаровывает меня сложными проблемами, и я считаю, что Realm и ObjectBox более последовательны, когда ваша модель довольно сложна.
Не стесняйтесь присоединиться к борьбе со своим пониманием.