我在我的应用中使用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
答案 0 :(得分:9)
ActiveAndroid存在问题,当启动即时运行时,无法检索在DexFile中搜索的Model类 有关DexFile和Instant运行的一些信息here
有三种可能的解决方法:
Configuration.Builder config = new Configuration.Builder(this);
config.addModelClasses(Model1.class, Model2.class);
ActiveAndroid.initialize(config.create());
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);