カスタムのグローバルアプリケーションクラスが「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

コードを5回チェックしましたが、どこにもエラーが見つかりません。誰がエラーがどこにあるか教えてもらえますか?

ありがとう

回答:


470

エラーが返されるオブジェクトの種類があることを述べてgetApplicationいますandroid.app.Application。これの考えられる原因は、マニフェストでアプリケーションを定義できなかったことです。マニフェストの次の行に何かが含まれていることを確認してください。

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

8
あらまあ、あなたは正しい。そして、私は過去100時間も働いていたのに、なぜ今度はそれが働きたくないのかを理解しようとして、最後の1時間を失いました:) どうもありがとう!
サンダロン

8
2年後、命を救う
Vrashabh Irde 14

30
ねえ。これをマニフェストに追加しました。ただし、それでもClassCastExceptionが発生します
Somu 2015

13
Android Nで数分前に同じ問題が発生した場合、マニフェストは正しかった。デバイスを再起動しました-例外はなくなりました。奇妙な...
artkoenig

3
@Somuキャッシュを消去し、インスタント実行を閉じてプロジェクトを再構築します。これは私に言いました、これはインスタント実行のバグだと思います。
LenaYan 2016年

11

古いAndroidデバイスまたはエミュレータ向けの別のソリューション。マニフェストでアプリケーションを定義しました。

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

しかし、あなたはまだこの問題を抱えていますか?

インスタント実行を無効にしてみてください:

  1. インスタント実行を無効にする
  2. プロジェクトをクリーンアップして再構築する
  3. アプリをデバイスから削除し、インスタント実行せずに再度インストールします
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.