自定义全局Application类中断"android.app.Application无法强制转换为"

san*_*one 135 android

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

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

    public void setMainAct(String mainAct) {
        MainAct = mainAct;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想Activity在其onCreate方法中通过另一个字符串保留此类中的字符串.

    String local = "myLocalVariable";
    ((MyApp) getApplication()).setMainAct(local); //breaks here!!!
    String name = ((MyApp) getApplication()).getMainAct();
Run Code Online (Sandbox Code Playgroud)

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

我已经检查了五次代码,我无法在任何地方找到错误.谁能告诉我错误在哪里?!

谢谢

K-b*_*llo 448

该错误表明返回的对象的类型getApplicationandroid.app.Application.可能的原因是您无法在清单中定义应用程序.确保您的清单包含以下内容:

<application android:name=".MyApp"...
</application>
Run Code Online (Sandbox Code Playgroud)

  • 嘿.我已将此添加到我的清单中.但是,它仍然给我一个ClassCastException (29认同)
  • 几分钟前在Android N上遇到同样的问题,清单是正确的.重启设备 - 异常消失了.奇怪... (13认同)
  • 天啊,你是对的.而且我在最后一小时试图弄清楚为什么它不想在这次工作100次之前工作:).非常感谢! (8认同)
  • 2年过去了,仍在拯救生命 (6认同)
  • 你不知道你救了多少灵魂:) (5认同)
  • 我已经有一个应用程序名称,我可以添加另一个吗? (3认同)
  • @Somu清理缓存,并关闭即时运行,重建项目,这个措辞对我来说,我认为这是一个即时运行的bug. (3认同)
  • K-ballo,你是一个聪明,聪明的男孩:)非常感谢你 (2认同)

Val*_*Val 11

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

    <application 
           android:name=".MyApp"...
    </application>
Run Code Online (Sandbox Code Playgroud)

但你还有这个问题吗?

尝试禁用即时运行:

  1. 禁用即时运行
  2. 清理并重建项目
  3. 从设备中删除应用程序并重新安装,无需立即运行