自定义全局应用程序类以“ android.app.Application无法转换为”中断


141

我有一个自定义的全局类,看起来像这样

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

    public void setMainAct(String mainAct) {
        MainAct = mainAct;
    }
}

我想通过另一个保持在这一类的字符串Activity在它的onCreate方法。

    String local = "myLocalVariable";
    ((MyApp) getApplication()).setMainAct(local); //breaks here!!!
    String name = ((MyApp) getApplication()).getMainAct();

它在带有错误的标记行上中断: Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.yyy.global.MyApp

我已经检查了五遍代码,但在任何地方都找不到错误。谁能告诉我错误在哪里?

谢谢

Answers:


470

错误指出返回的对象类型getApplicationandroid.app.Application。造成这种情况的可能原因是您未能在清单中定义应用程序。确保清单中包含以下内容:

<application android:name=".MyApp"...
</application>

8
哦,天哪,你是对的。而且我在上一小时迷失了方向,试图弄清为什么它在上次工作100次之前不希望这次工作:)。非常感谢!
sandalone,2012年

8
2年后,仍在挽救生命
Vrashabh Irde 2014年

30
嘿。我已将此添加到清单中。但是,它仍然给我ClassCastException
Somu 2015年

13
几分钟前在Android N上出现了相同的问题,清单是正确的。重新启动设备-异常消失了。奇怪...
artkoenig '16

3
@ Somu清理缓存,并关闭即时运行,重建项目,这对我来说,我认为这是即时运行的错误。
LenaYan '16

11

适用于较旧的Android设备或模拟器的另一种解决方案。您在清单中定义了一个应用程序:

    <application 
           android:name=".MyApp"...
    </application>

但是你还有这个问题吗?

尝试禁用即时运行:

  1. 禁用即时运行
  2. 清理并重建项目
  3. 从设备中删除该应用并重新安装,而无需即时运行
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.