Я использую Android Studio и хочу использовать платформу ORMLite. ORMLite для Android имеет механизм создания DAO через файл конфигурации таблицы.
Как настроить дополнительную конфигурацию запуска в Android Studio для создания этой конфигурации?
Я использую Android Studio и хочу использовать платформу ORMLite. ORMLite для Android имеет механизм создания DAO через файл конфигурации таблицы.
Как настроить дополнительную конфигурацию запуска в Android Studio для создания этой конфигурации?
Мне это удалось, но это было немного сложно.
У меня есть класс DatabaseConfigUtil, который расширяет OrmLiteConfigUtil, который я создал, просто следуя официальному учебному руководству ormlite, поэтому я просто предполагаю, что вы сделали то же самое, а также этот класс. Обратите внимание, что вам необходимо передать полный путь к файлу конфигурации, а не только имя файла.. Тем не менее, это:
public class DatabaseConfigUtil extends OrmLiteConfigUtil {
private static final Class<?>[] classes = new Class[] {
Class1.class, Class2.class, Class3.class, Class4.class
};
public static void main(String[] args) throws SQLException, IOException {
writeConfigFile(new File("PATH/TO/ANDROID/PROJECT/src/main/res/raw/ormlite_config.txt"), classes);
}
}
Это класс, который мы хотим выполнить, чтобы создать файл ormlite_config.txt.
На панели навигации проекта Android Studio щелкните правой кнопкой мыши по DatabaseConfigUtil.java и выберите "Запустить" (опция с зеленой стрелкой). Если у вас нет созданной конфигурации запуска, она создаст ее для вас.
Теперь просто отредактируйте конфигурацию
В разделе "Перед запуском" удалите Make. Это не проблема, если в исходной папке у вас уже есть файл ormlite_config.txt, но если вы этого не сделаете, когда вы запустите класс, проект будет скомпилирован, что не удастся, потому что ormlite_config.txt не существует.
Теперь запустите проект еще раз.
Теперь все должно идти гладко.
Приветствия
---------------------------- ## ----------------- -----------
UPDATE:
Недавно мне пришлось снова работать с ORMLite и решили, что это решение может быть автоматизировано с помощью плагина gradle. Прежде чем создать свой собственный, как ленивый разработчик, которым я являюсь, я решил проверить, пытался ли кто-нибудь сделать это раньше. К счастью, @snicolas сделал именно это, и вы можете найти его плагин здесь. Я пробовал, и он работает достаточно хорошо. Он создает задачу с именем createORMLiteConfigFile*Variant*
, которую вы можете запустить для создания файла.
Сбор всех комментариев в ответ @Joao дал мне это рабочее решение:
1) Измените конфигурацию для генератора файлов конфигурации DB:
2) Настройте Working directory
как $MODULE_DIR$/src/main
.
3) В Before launch
замените Make
на Make, no error check
Когда у вас есть эти шаги, вы можете указать только имя файла в классе OrmLiteConfigUtil
:
public class DBConfigUtil extends OrmLiteConfigUtil {
/**
* To make this work in Android Studio, you may need to update your
* Run Configuration as explained here:
* http://stackoverflow.com/a/17332546
*/
public static void main(String[] args) throws Exception {
writeConfigFile("ormlite_config.txt", sClasses);
}
Я получил ту же проблему, что и для класса ClassNotFoundException. Обходной путь для этого заключается в том, чтобы временно изменить код, чтобы компилятор смог скомпилировать проект.
Мне пришлось удалить значение R.raw.ormlite_config, которое я использовал в классе DatabaseHelper, который я передаю super().
public class DBConfigUtil extends OrmLiteConfigUtil {
private static final Class<?>[] classes = new Class[] {Workout.class};
public static void main(String[] args) throws IOException, SQLException {
writeConfigFile("ormlite_config.txt",classes);
}
}
Мой класс DBHelper, который расширяет расширения, требует, чтобы OrmLiteSqliteOpenHelper не использовал необработанную папку. Это помогает при компиляции проекта успешно.
public DBHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION,1);// R.raw.ormlite_config
}
Хорошо, я напал на ту же ClassNotFoundException, что и OP. Вот как я это решил:
Краткая заметка: у меня есть проект библиотеки и основной проект, и оба они настроены с помощью Gradle, что может быть весьма разным, поскольку ранее называемое решение не работало для моей установки.
Итак, мои шаги:
Я создал класс DatabaseConfigUtil
public class DatabaseConfigUtil extends OrmLiteConfigUtil {
public static final Class<?>[] MODELS = {Character.class, Party.class, Clazz.class};
/**
* This must be called as a stand alone app by a JRE instance and NOT by android.
* It will create an ormlite config file that will make the reflection for annotation and more easier and faster.
* <p/>
* Make sure you have pathOfProject/build/classes/debug in your class path when running!
* <p/>
* Working class path:
* <code>-classpath /usr/lib/jvm/java-7-oracle/lib/jconsole.jar:/usr/lib/jvm/java-7-oracle/lib/dt.jar:/usr/lib/jvm/java-7-oracle/lib/sa-jdi.jar:/usr/lib/jvm/java-7-oracle/lib/tools.jar:/usr/lib/jvm/java-7-oracle/lib/javafx-doclet.jar:/usr/lib/jvm/java-7-oracle/lib/ant-javafx.jar:/usr/lib/jvm/java-7-oracle/lib/javafx-mx.jar:/home/martin/workspace/idea/Project/MainProject/libs/ormlite-android-4.45.jar:/home/martin/workspace/idea/Project/MainProject/libs/ormlite-core-4.45.jar:/opt/android-studio/lib/idea_rt.jar:/home/martin/workspace/idea/Project/MainProject/build/classes/debug:/opt/android/platforms/android-16</code>
*
* @param args none will be used.
* @throws Exception
*/
public static void main(String[] args) throws Exception {
writeConfigFile(new File("MODULENAME/src/main/res/raw/ormlite_config.txt"), MODELS);
}
}
Обратите внимание на путь класса, который я использовал в моей документации: он в основном основан на обычном пути к классам, который вы получаете при попытке запустить вышеуказанный класс (просто скопируйте его).
VM options
Вы должны увидеть результат, который создавали классы, определенные вами в MODELS
.
Боковое замечание: Жоао Соуза сказал, что вы должны изменить исходный код ORMlite. Существует более простой метод: метод writeConfigFile(fileName)
, кажется, разбит в новой структуре Gradle, поскольку он начинает искать в корне модуля и идет вверх, вместо перехода на src/main/res/raw
, поэтому мне нужно было использовать другой где я могу указать объект файла как параметр (см. выше код).
Заключительное примечание. Когда я пытаюсь сделать много вещей при одном нажатии, я создал вторую конфигурацию запуска, которая называется "PROJECTNAME FULL", которая будет делать "make", чем запускает конфигурацию запуска ormlite и, наконец, вторую "MAKE".
Первый make компилирует источники, чтобы можно было создать конфигурацию ormlite, а вторая "make" гарантирует, что новый созданный файл конфигурации будет добавлен к вновь созданной сборке, которая будет установлена. Эта конфигурация "ПОЛНАЯ" не должна запускаться каждый раз, но не реже одного раза, когда вы изменили классы моделей.
У меня были проблемы с этим, потому что мои классы DB были определены в проекте Java, внешнем по отношению к моему проекту Android. Но OrmLiteConfigUtil определен в библиотеке ormlite-android и должен быть встроен в сам проект андроида.
Все в порядке, Грей планирует впереди. Там перегрузка writeConfigFile, который принимает аргументы файла, определяющие каталог поиска.
public class DatabaseConfigUtil extends OrmLiteConfigUtil {
public static void main(String[] args) throws Exception {
File conffile = new File("app/src/main/res/raw/ormlite_config.txt");
File searchdir = new File("../jclip/tdb/src/main/java/");
writeConfigFile(conffile, searchdir);
}
}
измените "рабочий каталог" на /src/main проекта в "Редактирование конфигураций"