Користувальницький глобальний клас програми перерви з "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

Я перевіряв код п'ять разів і ніде не можу знайти помилку. Хтось може сказати мені, де помилка ?!

Дякую

Відповіді:


470

Помилка стверджує, що тип об'єкта, повернутий getApplicationє android.app.Application. Можливою причиною цього є те, що вам не вдалося визначити додаток у маніфесті. Переконайтеся, що ваш маніфест містить щось у рядках:

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

8
О Боже, ти маєш рацію. І я втратив останню годину, намагаючись зрозуміти, чому вона не хоче працювати цього разу, коли раніше працювала 100 разів :). Дуже дякую!
сандалон

8
2 роки, як і раніше, рятують життя
Vrashabh Irde

30
Гей. Це я додав до свого маніфесту. Тим НЕ менше, він по - , як і раніше дає мені ClassCastException
Somu

13
Якщо на Android N минула така ж проблема, маніфест був правильним. Перезапустив пристрій - винятку не було. Дивно ...
artkoenig

3
@Somu чистий кеш і закрити миттєвий запуск, відновити проект, це сформульовано для мене, я думаю, це помилка миттєвого запуску.
ЛенаЯн

11

Ще одне рішення для старих пристроїв або емуляторів Android . Ви вказали програму в маніфесті:

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

але у вас все ще є ця проблема?

Спробуйте відключити миттєвий запуск:

  1. Вимкнути миттєвий запуск
  2. Очистіть і відновіть проект
  3. Видаліть програму з пристрою та встановіть її знову без миттєвого запуску
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.