web-dev-qa-db-fra.com

Pourquoi Active Android ne fonctionne pas avec Gradle 2.0?

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
16
Rohan Arora

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"

28
Aaron Y

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:

  1. Désactiver Intant exécuter Android Studio -> Préférences -> Exécuter Intant
  2. Ajoutez le code déjà suggéré dans AndroidManifest:
<meta-data
    Android:name="AA_MODELS"
    Android:value="com.myapp.model.Item, com.myapp.model.Category" />
  1. Ajoutez le code suivant dans l’initialisation ActiveAndroid:
Configuration.Builder config = new Configuration.Builder(this);
config.addModelClasses(Model1.class, Model2.class);
ActiveAndroid.initialize(config.create());

J'espère que ça aide

9
VictorG

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;

7
Linkang Ma

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

1
ELHechmi Essalah

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.

0
Kishore Vignesh

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);
0
lodlock