Android 无法对null对象调用方法hasAnnotation()

Android 无法对null对象调用方法hasAnnotation(),android,realm,Android,Realm,我只是想把Realm数据库从0.86升级到2.1版本 但是随着Android Studio的出现,我们也面临着这个错误 Error:Execution failed for task ':app:transformClassesWithRealmTransformerForDebug'. > Cannot invoke method hasAnnotation() on null object 更新(3) 没有任何原因,这会停止应用程序运行 有什么解决方案吗?因此根据堆栈跟踪: def

我只是想把Realm数据库从0.86升级到2.1版本

但是随着Android Studio的出现,我们也面临着这个错误

Error:Execution failed for task ':app:transformClassesWithRealmTransformerForDebug'.
> Cannot invoke method hasAnnotation() on null object
更新(3)

没有任何原因,这会停止应用程序运行


有什么解决方案吗?

因此根据堆栈跟踪:

def allModelClasses=allClassNames

.findAll{it.endsWith('RealmProxy')}

.collect{classPool.getCtClass(it).superclass}

.findAll{it.hasaannotation(RealmClass.class)| it.superclass.hasaannotation(RealmClass.class)}

所以它说“如果你有一个以
RealmProxy
结尾的类”,然后它试图得到它没有的超类(应该是
RealmObject
RealmModel
),因为它不是领域模式的一部分,所以它返回
null
,转换器崩溃

解决方案1:将您的
RealmProxy
类重命名为类似于,
RealmFacade
之类的名称

解决方案2:使用
RealmProxy
扩展一些没有
@RealmClass
注释的随机类

public abstract class RealmProxyBase {
}

public class RealmProxy extends RealmProxyBase implements Closeable { 
   // ...


(同时,我为它提交了一份文件)

因此,根据您的堆栈跟踪,:

def allModelClasses=allClassNames

.findAll{it.endsWith('RealmProxy')}

.collect{classPool.getCtClass(it).superclass}

.findAll{it.hasaannotation(RealmClass.class)| it.superclass.hasaannotation(RealmClass.class)}

所以它说“如果你有一个以
RealmProxy
结尾的类”,然后它试图得到它没有的超类(应该是
RealmObject
RealmModel
),因为它不是领域模式的一部分,所以它返回
null
,转换器崩溃

解决方案1:将您的
RealmProxy
类重命名为类似于,
RealmFacade
之类的名称

解决方案2:使用
RealmProxy
扩展一些没有
@RealmClass
注释的随机类

public abstract class RealmProxyBase {
}

public class RealmProxy extends RealmProxyBase implements Closeable { 
   // ...


(与此同时,我为此提交了一份文件)

您的至少一个领域模型类出现了某种错误。这个错误消息没有更多内容吗?@EpicPandaForce但我的类模式中没有任何更改,它是从以前的版本开始工作的,您的意思是某些批注已被弃用吗?@EpicPandaForce在build中只有此错误消息。您是否使用
/gradlew clean assemble--stacktrace
从命令中清除然后重建。它应该报告崩溃的确切位置至少有一个领域模型类出现了某种错误。这个错误消息没有更多内容吗?@EpicPandaForce但我的类模式中没有任何更改,它是从以前的版本开始工作的,您的意思是某些批注已被弃用吗?@EpicPandaForce在build中只有此错误消息。您是否使用
/gradlew clean assemble--stacktrace
从命令中清除然后重建。它应该报告崩溃的确切位置非常感谢你,亲爱的,是什么让我确信我的代码是正确的,我在以前的版本中有RealmProxy,它工作正常,没有任何问题,如何感谢你并准备好未来的问题:是的,但Realm在0.88.0及以上版本中添加了领域转换器,以前没有人遇到过这个NPE。尽管如此,
解决方案2
还是很简单,这就是我要做的。非常感谢亲爱的,是什么让我确信我的代码是正确的,我以前的版本中有RealmProxy,它工作得很好,没有任何问题,如何感谢您并准备好未来的问题:是的,但是Realm在0.88.0及更高版本中添加了Realm Transformer,以前没有人遇到过这个NPE。不过,
解决方案2
相当简单,这就是我要做的。