为什么Active Android无法使用gradle 2.0?

时间:2016-04-08 02:35:45

标签: android android-studio android-gradle activeandroid

我在我的应用中使用Active Android。它工作正常,直到我将Android Studio从1.3升级到2.0。通过此升级,我的gradle也升级到2.0,这导致Active 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)

我尝试使用gradle 1.3构建我的旧工作室它仍然正常工作。 有什么帮助吗?

当app发出上述错误时

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()
    }
}
当app工作正常时

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

5 个答案:

答案 0 :(得分:9)

ActiveAndroid存在问题,当启动即时运行时,无法检索在DexFile中搜索的Model类 有关DexFile和Instant运行的一些信息here

有三种可能的解决方法:

  1. 禁用Intant运行Android Studio - >偏好 - >直播
  2. 在AndroidManifest中添加已建议的代码:
  3. Configuration.Builder config = new Configuration.Builder(this);
    config.addModelClasses(Model1.class, Model2.class);
    ActiveAndroid.initialize(config.create());
    
    1. 在ActiveAndroid初始化中添加以下代码:
    2. crashlyticsApiKey

      希望有所帮助

答案 1 :(得分:7)

我遇到了同样的问题,但我不知道为什么。我在AndroidManifest中明确指定了我的Model类:

<meta-data
    android:name="AA_MODELS"
    android:value="com.myapp.model.Item, com.myapp.model.Category" />

已经解决了;

答案 2 :(得分:1)

我在gradle 2.0上有同样的问题,但我不知道为什么会出现这个错误 ,,最后通过将gradle版本降级为 gradle 1.5.0

解决

答案 3 :(得分:0)

我对活动的Android ORM有同样的问题。不仅仅在模拟器上工作。关闭即时运行。并完全重新安装了应用程序,清除了错误。

答案 4 :(得分:0)

要添加VictorG提供的答案,您可以避免禁用即时运行。由于基本问题是Cache由于即时运行导致的ModelInfo更改而未保留DexFile值,因此您可以检查ModelInfo是否包含任何表格数据并重新初始化ActiveAndroid如果需要的话。

if (Cache.isInitialized() && Cache.getTableInfos().isEmpty()) {
    ActiveAndroid.dispose();
}
ActiveAndroid.initialize(HOWEVER_YOU_BUILD_YOUR_CONFIG);