ClassCastException:Application对象不是我的自定义应用程序对象

时间:2017-12-15 14:38:32

标签: android dagger-2 dagger

通常在Android代码中,我们使用这种在Application对象中存储数据的模式,然后通过强制转换来访问它:

((MyApplicationObject)getApplication()).getDaggerComponent()

getApplication()应该始终为MyApplicationObject,因为我已在AndroidManifest.xml中指定了它。但是,当您部署此代码时,有时它会导致ClassCastException,而我们会得到一个不同的对象。

这怎么可能?

此问题的正确解决方法是什么?

1 个答案:

答案 0 :(得分:3)

评论中已解决:这是一个Android错误,而不是与Dagger相关的错误。

  

感谢您的链接! 98%的崩溃来自Android 7.0,其中0.2%来自Android 7.1。在链接中,一位@google工程师表示他们在7.0中的主要问题上做了改进,但没有完全修复它。 - gregm

请参阅此公开Goog​​le IssueTracker链接,#37137009: java.lang.ClassCastException: Cannot cast android.app.Application to com.xxx.xxApplication(ctate在#17中的评论):

  

是的,这是一个已知问题;并在7.1中得到了解决。 7.1中仍然存在一些可能导致类似情况的边缘情况 - 正如您从分析中看到的那样 - 但机会窗口要窄得多,而Android 8也解决了这些问题。

不幸的是,暂时似乎没有太多解释或官方解决方法,但至少问题主要限于Android 7.0的范围。