В настоящее время я работаю над проектом, в котором у моей базы данных очень большое количество таблиц (всего около 60). Я работаю над созданием класса Database Helper, который будет работать как писатель/читатель в/из базы данных. И пример моего метода записи будет таким:В Java, как мне сделать объект Realm в класс, который я хочу записать в базу данных?
public static void executeInsertInto(final Context context, final UserData passedObject){
//Generate a realm object from the context
Realm realm = Realm.getInstance(context);
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
//Begin a transaction, create a new item from the passed object, and commit.
realm.beginTransaction();
UserData itemToWrite = realm.copyToRealm(passedObject);
realm.commitTransaction();
}
});
//Close the realm object to prevent leaks
if (realm != null) {
realm.close();
}
}
Как видно из кода, я вручную создал объект типа UserData; Проблема в том, что я либо должен повторить это в общей сложности 60 раз (для многих типов объектов/таблиц), либо придумать лучший способ. Это приводит меня к моему вопросу, есть ли способ создать объект, используя тип переданного объекта для определения класса? Что-то вроде кода ниже не хочет работать, как я делаю что-то в корне неправильно с моим Java кодом:
public static void executeInsertInto(final Context context, final RealmObject passedObject){
//Generate a realm object from the context
Realm realm = Realm.getInstance(context);
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
//Begin a transaction, create a new item from the passed object, and commit.
realm.beginTransaction();
//The below line is flawed in that you cannot create an object that way,
//But hopefully it illustrates what I am trying to accomplish
passedObject.getClass() itemToWrite = (passedObject.getClass()) realm.copyToRealm(passedObject);
realm.commitTransaction();
}
});
//Close the realm object to prevent leaks
if (realm != null) {
realm.close();
}
}
Кто-нибудь есть какие-либо идеи? Буду весьма признателен за это!
EDIT: Просто чтобы прояснить дальше, Возьмите Сферу из картины на одну секунду, предполагая, что у меня есть два класса (класса автомобилей и класса велосипед), оба из которых распространяются на класса транспорта, если Я передал транспорт класса как аргумент, как я могу определить, какой тип передается, а затем как только я это сделаю, как мне создать новый объект с этой информацией?
-Sil
Обратите внимание на executeTransaction() выполнит BeginTransaction() и CommitTransaction() для вас. Это точка executeTransaction(). В качестве альтернативы вы можете просто оставить весь файл executeTransaction() и использовать тело прохода execute(). – bmunk