Android Studioを使用していて、ORMLiteフレームワークを使用したい。 ORMLite for Androidには、 table config file を介してDAOを作成するためのメカニズムがあります。
この構成を生成するためにAndroid Studioで追加の実行構成をセットアップする方法
なんとかやりましたが、少しトリッキーでした。
OrmLiteConfigUtilを拡張するDatabaseConfigUtilと呼ばれるクラスがあります。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を右クリックし、[実行](緑の矢印の付いたオプション)を選択します。実行構成を作成していない場合は、作成されます。
さて、設定を編集してください
「起動前」セクションで、メイクを削除します。 rawフォルダーにファイルormlite_config.txtがすでにある場合は問題ありませんが、ない場合は、クラスを実行するとプロジェクトがコンパイルされ、ormlite_config.txtが存在しないために失敗します。
ここでプロジェクトを再度実行します。
すべてが順調に進んでいるはずです。
乾杯
---------------------------- ## -------------------- --------
更新:
最近、私は再びORMLiteを使用する必要があり、このソリューションはGradleプラグインで自動化できると判断しました。私自身を作成する前に、私は怠惰な開発者として、誰かが以前に同じことを試みたかどうかを確認することにしました。ありがたいことに、@ snicolasはまさにそれを行い、あなたは彼のプラグイン here を見つけることができます。私はそれを試しました、そしてそれはかなりうまくいきます。ファイルを生成するために実行できる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);
}
OPがClassNotFoundExceptionで取得したのと同じ問題が発生しました。これを回避するには、一時的にコードを変更して、コンパイラーにプロジェクトをコンパイルさせるようにします。
Super()に渡すDatabaseHelperクラスで使用したR.raw.ormlite_config値を削除する必要がありました。
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);
}
}
OrmLiteSqliteOpenHelperを拡張する私のDBHelperクラスは、まだrawフォルダーを使用する必要はありません。これは、プロジェクトを正常にコンパイルするのに役立ちます。
public DBHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION,1);// R.raw.ormlite_config
}
わかりました、OPと同じClassNotFoundExceptionに失敗しました。これが私がそれを解決した方法です:
短いメモ:ライブラリプロジェクトとメインプロジェクトがあり、どちらも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
で定義したクラスが作成されたという出力が表示されます。
補足:Joao Sousaさんは、ORMliteソースコードを変更する必要があると述べました。より簡単な方法があります:writeConfigFile(fileName)
メソッドは、新しいGradle構造で壊れているようです。モジュールのルートを調べ始め、_src/main/res/raw
_に移動するのではなく、上に移動するため、ファイルオブジェクトをパラメーターとして指定できるもう1つの方法を使用します(上記のコードを参照)。
最後のメモ:1回のプレスで多くのものを作ろうとするため、私は「PROJECTNAME FULL」と呼ばれる2番目の実行構成を作成しました。
最初のmakeはソースをコンパイルしてormlite構成を作成できるようにし、2番目の「make」は新しく作成された構成ファイルが新しくインストールされるビルドに追加されることを確認します。この "FULL"構成は毎回実行する必要はありませんが、モデルクラスを変更したときに少なくとも1回実行する必要があります。
DBクラスがJavaプロジェクトの外部のAndroidプロジェクトの外部で定義されています。ただし、OrmLiteConfigUtilはormlite-Androidライブラリで定義されています。 、Androidプロジェクト自体にビルドする必要があります。
大丈夫です、グレイは先を計画しています。検索ディレクトリを指定するFile引数を受け入れる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に変更します。