J'utilise Active Android dans mon application. Cela fonctionnait bien jusqu'à ce que je mette à niveau mon Android Studio vers la version 2.0 depuis la version 1.3. Avec cette mise à niveau, mon diplôme a également été mis à niveau vers la version 2.0, ce qui pose un problème avec Active Android.
Je reçois cette erreur lors de la construction avec 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)
J'ai essayé de construire mon ancien studio avec le grade 1.3, il fonctionne toujours bien. Toute aide s'il vous plaît?
fichier build.gradle quand l'application donne l'erreur ci-dessus
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 quand l'application fonctionne bien
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()
}
}
propriétés de l'emballage gradé
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
J'ai rencontré ce problème aussi, j'ai constaté que c'était uniquement un problème sur les appareils Android 23+ et il peut être évité si vous désactivez Instant Run (Fichier-> Paramètres-> Construire, Exécution, Déploiement-> Instant Run).
Si vous souhaitez conserver Instant Run, vous pouvez essayer de décocher "Redémarrer l'activité après modification du code".
Sur Mac:
Préférences> Construire, Exécution, Déploiement> Exécution instantanée> Désactiver la case "Redémarrer l'activité après modification du code"
Il y a un problème avec ActiveAndroid qui ne permet pas d'extraire les classes Model dans le fichier DexFile lorsque l'exécution instantanée est activée . Des informations sur DexFile et Instant run ici
Il existe trois solutions possibles:
<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());
J'espère que ça aide
J'ai rencontré le même problème, mais je ne sais pas pourquoi. J'ai explicitement spécifié mes classes de modèle dans mon AndroidManifest:
<meta-data
Android:name="AA_MODELS"
Android:value="com.myapp.model.Item, com.myapp.model.Category" />
C'est résolu;
j'ai le même problème sur Gradle 2.0, mais je ne comprends pas pourquoi cette erreur présente , enfin je ai résolu en rétrogradant la version de gradle à gradle 1.5.0
J'ai eu le même problème avec Android ORM actif. Ne fonctionne pas uniquement sur l'émulateur. Eteindre le run instantané. Et une réinstallation complète de l'application, effacé l'erreur.
Pour ajouter à la réponse fournie par VictorG, vous pouvez éviter de désactiver l'exécution instantanée. Puisque le problème fondamental est que Cache
ne conserve pas les valeurs ModelInfo
en raison de modifications de DexFile
causées par une exécution instantanée, vous pouvez vérifier si la ModelInfo
contient des données de table et réinitialiser ActiveAndroid
si nécessaire.
if (Cache.isInitialized() && Cache.getTableInfos().isEmpty()) {
ActiveAndroid.dispose();
}
ActiveAndroid.initialize(HOWEVER_YOU_BUILD_YOUR_CONFIG);