Расширение класса в приложении в библиотеке проектов Android?

У меня есть проект (в Eclipse), который я превратил в библиотеку проектов Android, чтобы повторно использовать часть кода в другом подобном проекте. Я думаю, что я застрелился в ногу, но когда я получаю ошибку:

Unable to start activity ComponentInfo{com.test.scroller1/com.lib.scrolltest.ScrollTestActivity}: java.lang.ClassCastException: android.app.Application cannot be cast to com.lib.scrolltest.resAppVars 

Com.lib.scrolltest – это моя библиотека проектов, которая создает экземпляр класса, расширяющего приложение (resAppVars). В методе onCreate () я вызываю:

 mRav = (resAppVars) getApplicationContext (); 

Таким образом, я могу использовать методы в объекте mRav, которые в противном случае были бы много дублированного кода в других классах (например, передача запроса в общий оператор select, который возвращает ArrayList результатов).

В чем проблема? Кажется, я наткнулся на ограничение в том, как я реализовал класс Application.

Вызов getApplicationContext () возвращает объект Application для текущего приложения (т. onCreate() Приложение, которое владеет активностью, onCreate() внутри).

Если вы не делаете что-то странное, вам не нужно выбирать, какой класс приложения используется. В документации для приложения есть даже заметка о том, что не делать этого:

Как правило, нет необходимости в подклассе Application. В большинстве случаев статические синглтоны могут обеспечивать такую ​​же функциональность более модульным способом. Если вашему одноточечному узлу нужен глобальный контекст (например, для регистрации широковещательных приемников), функция для его получения может быть предоставлена ​​Контекст, который внутренне использует Context.getApplicationContext () при первом конструировании Singleton.

Вы должны просто создать обычный общий класс внутри вашего проекта библиотеки. Или, если вам не нужны специальные проекты библиотеки функций, вы также можете просто использовать обычный .jar-файл.

И если вам нужно общее состояние, просто сделайте его одиночным. 😉

Хотя это очень старый пост. Я столкнулся с той же проблемой и решил ее. Поэтому я решил опубликовать решение для всех.

Оказывается, я забыл объявить имя подкласса приложения в файле манифеста. Имя android:name должно указывать на расширенный класс приложения, даже если он определен в справочной библиотеке.

 <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:name="com.example.lib.MyApp"> 

После того, как я добавил, что я мог бы использовать расширенное приложение с помощью (<cast>) getApplication() любом месте моего проекта.

Intereting Posts
Android. Отправить текст в facebook messenger от Facebook SDK 4.X Почему вызов setScaleX во время жесткого зума зума вызывает мерцание? Как импортировать модуль без создания копии в Android Studio Код локали для иврита / Ссылка на другие коды локали? Компиляция с помощью NDK дает ошибку для успешно включенных файлов заголовков Постоянный намек в EditText Как импортировать или копировать изображения в папку «res» в Android Studio? Разница между PagerTabStrip и TabLayout Не удается разрешить символ для фрагментов Android-ресурс Android – должен содержать символ «%» Java.io.IOException: проверка подлинности с проверкой подлинности равна нулю Как использовать существующую базу данных с Android-приложением Смутно о CursorLoaders и использовании их с помощью специального SQLiteOpenHelper Как отобразить пользовательский интерфейс календаря в приложении для Android? Получить формат контактов E64 в Android API менее 16