アプリでActive Androidを使用しています。Android Studioを1.3から2.0にアップグレードするまでは正常に機能していました。このアップグレードにより、gradleもアップグレードされました。 2.0に移行すると、アクティブなAndroidで問題が発生します。
Gradle 2.0でビルドすると、このエラーが発生します。
Caused by: Java.lang.NullPointerException: Attempt to invoke virtual method 'Java.lang.String com.activeandroid.TableInfo.getTableName()' on a null object reference
at com.activeandroid.Cache.getTableName(Cache.Java:156)
at com.activeandroid.query.From.addFrom(From.Java:169)
at com.activeandroid.query.From.toSql(From.Java:250)
at com.activeandroid.query.From.execute(From.Java:298)
古いスタジオをgradle1.3で構築してみましたが、まだ正常に機能しています。何か助けてください?
アプリが上記のエラーを出しているときのbuild.gradleファイル
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:2.0.0'
classpath 'com.google.gms:google-services:2.0.0-beta2'
}
}
allprojects {
repositories {
jcenter()
}
}
アプリが正常に動作している場合のbuild.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.0'
classpath 'com.google.gms:google-services:2.0.0-beta2'
}
}
allprojects {
repositories {
jcenter()
}
}
gradleラッパーのプロパティ
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.Zip
私もこの問題に遭遇しました。これはAndroid 23以上のデバイスでのみ問題であり、インスタント実行をオフにすると回避できます([ファイル]-> [設定]-> [ビルド、実行]、展開->インスタント実行)。
インスタント実行を維持したい場合は、「コード変更時にアクティビティを再開する」のチェックを外してみてください。
Macの場合:
環境設定>ビルド、実行、展開>インスタント実行> [コード変更時にアクティビティを再開する]のチェックを外します
インスタント実行がアクティブ化されているときにDexFileで検索しているモデルクラスを取得できないActiveAndroidに問題がありますDexFileとインスタント実行に関するいくつかの情報 ここ
考えられる回避策は3つあります。
<meta-data
Android:name="AA_MODELS"
Android:value="com.myapp.model.Item, com.myapp.model.Category" />
Configuration.Builder config = new Configuration.Builder(this);
config.addModelClasses(Model1.class, Model2.class);
ActiveAndroid.initialize(config.create());
それが役に立てば幸い
同じ問題が発生しましたが、理由はわかりません。AndroidManifestでModelクラスを明示的に指定しました。
<meta-data
Android:name="AA_MODELS"
Android:value="com.myapp.model.Item, com.myapp.model.Category" />
解決されました。
私はgradle2.0で同じ問題を抱えていますが、なぜこのエラーが発生するのかわかりません、最終的に私は解決済み gradleバージョンをgradle 1.5.にダウングレードします
アクティブなAndroid ORMで同じ問題が発生しました。エミュレーターでのみ機能しません。インスタント実行をオフにします。アプリを完全に再インストールすると、エラーが解消されました。
VictorGが提供する回答に追加するには、インスタント実行を無効にすることを回避できます。基本的な問題は、インスタント実行によるCache
の変更により、ModelInfo
がDexFile
の値を保持しないことであるため、ModelInfo
に何かが含まれているかどうかを確認できます。テーブルデータを作成し、必要に応じてActiveAndroid
を再初期化します。
if (Cache.isInitialized() && Cache.getTableInfos().isEmpty()) {
ActiveAndroid.dispose();
}
ActiveAndroid.initialize(HOWEVER_YOU_BUILD_YOUR_CONFIG);