为什么 Active Android 不能与 gradle 2.0 一起使用?

Why Active Android is not working with gradle 2.0?

我在我的应用程序中使用 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 构建我的旧工作室,它仍然运行良好。 有什么帮助吗?

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

我遇到了同样的问题,但我不知道 why.I 在我的 AndroidManifest 中明确指定了我的模型 类:

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

已解决;

我 运行 也遇到了这个问题,我发现这只是 Android 23+ 设备上的一个问题,如果你关闭 Instant 运行 就可以避免这个问题(文件- >设置->构建、执行、部署->即时 运行).

如果你想保持 Instant 运行 你可以试试 UnChecking "Restart Activity on Code Changes"

在 Mac:

Preferences > Build, Execution, Deployment > Instant Run > Uncheck "Restart Activity on Code Changes"

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

解决了

A​​ctiveAndroid 存在问题,当 Instant 运行 激活时,它无法检索在 DexFile 中搜索的模型 类 关于 DexFile 和 Instant 的一些信息 运行

存在三种可能的解决方法:

  1. 禁用 Intant 运行 Android Studio -> 首选项 -> Intant 运行
  2. 在 AndroidManifest:
  3. 中添加已经建议的代码
<meta-data
    android:name="AA_MODELS"
    android:value="com.myapp.model.Item, com.myapp.model.Category" />
  1. 在ActiveAndroid初始化中添加如下代码:
Configuration.Builder config = new Configuration.Builder(this);
config.addModelClasses(Model1.class, Model2.class);
ActiveAndroid.initialize(config.create());

希望对您有所帮助

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

要添加到 VictorG 提供的答案中,您可以避免禁用即时 运行。由于基本问题是 Cache 由于即时 运行 引起的 DexFile 更改而不会保留 ModelInfo 值,您可以检查 ModelInfo 是否包含任何table 数据并根据需要重新初始化 ActiveAndroid

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