Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 39
1

Java.lang.ClasscastException

06.05.2015, 15:21. Просмотров 629. Ответов 12
Метки нет (Все метки)

Пишу на андроид, но не суть. Есть один класс, наследующий от application, например MyApp. В MainActivity (главном рабочем, стартовом классе через try-catch создаю экземпляр класса MyApp следующим способом:
Java
1
MyApp myapp = (MyApp)getapplication();
В результате выбрасывает с java.lang.ClasscastException. Погуглил, в итоге в манифесте прописал строчку вида
<application android:name=".MyApp" > />. Абсолютно ничего не изменилось. Ума не приложу как исправить. Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2015, 15:21
Ответы с готовыми решениями:

Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map
Ошибка появляется когда пытаюсь вытянуть из кастомного адаптера запись...

Ошибка: Caused by Android java.lang.ClassCastException: android.app.Application cannot be cast
Здравствуйте. Очень нужен ваш совет. При запуске приложения появляется ошибка:...

Ava.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] link.stuzer.stattrack.data
// Print out the database as array public String getAllWeapons(){ ...

java.lang.NoClassDefFoundError
Не пойму, что не так. DataActivity.java находится в пакете com.example.helper,...

Java.lang.ClassNotFoundException
Сам класс MainActivity обьявлен то есть создан. Но почему-то вываливает ошибки...

12
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
06.05.2015, 23:25 2
Grifis, что-то вы сложное для новичка взяли. Объясните цель действий, а мы вам расскажем, как всё переделать.
0
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 39
07.05.2015, 05:49  [ТС] 3
CoolMind, мне нужно тупо сделать глобальную переменную, чтобы она не дохла от гарбадж коллектора. Нашёл что можно сделать через неубиваемый класс наследующий от application, не получилось
0
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
07.05.2015, 08:32 4
Grifis, это можно, но опасно. Работал в разных языках с глобальными переменными, в большинстве случаев приводят к разным трудно исправляемым ошибкам. Обычно для передачи данных через формы используются параметры (в конструкторах форм).
В вашем случае можно посоветовать статическую переменную, причём её можно поместить не только в отдельный модуль, но даже в активность. Если программа завершится, или активность пересоздастся, такая переменная сохранит своё значение. К сожалению, при следующем запуске она снова будет иметь то же значение, пока не перезапустится JVM. Поэтому можно дополнительно предусмотреть проверку на запуск программы и повторную инициализацию этой переменной.
Но вообще надо смотреть, чего вы хотите. Возможно, такой потребности и нет вовсе. Также вы можете сохранять некоторые значения в SharedPreferences.
0
Pablito
07.05.2015, 08:35
  #5

Не по теме:

ТС занимается фигней с умным видом

0
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 39
07.05.2015, 11:48  [ТС] 6
CoolMind, в Shared сохранять не могу из-за закрытости данных (типа конфиденциальность). Со статиком как раз таки опасней, много почитал про него, тошнит уже от NPE, не хочу опять потом баги искать. Насчёт "фигни с умным видом" - Вы бы посоветовали сначала что-нибудь, а потом уже критиковали. Я точно знаю какой вылезает экспепшн, решение на поверхности, но до меня пока не доходит. Разве Статик переменная сохраняет своё значение после смерти активности/приложения? Бред, если честно
0
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
07.05.2015, 13:11 7
Grifis, к сожалению, это особенность Андроида. Я тоже долго мучался из-за того, что статические переменные уничтожаются только с завершением JVM.
В общем, я ничего не понял из вашего рассказа. Сделайте тогда отдельный класс, который бы создавался при запуске и завершался при завершении программы (что является отдельной проблемой). В нём и храните переменную. Только это всё равно ненадёжно.
0
Pablito
2722 / 2165 / 735
Регистрация: 12.05.2014
Сообщений: 7,572
Завершенные тесты: 1
07.05.2015, 13:34 8
я сделал свой класс MyApp extends Application , прописал его в манифесте
в onCreate() в основной активити написал
Java
1
2
MyApp myApp = (MyApp) getApplication();
myApp.lol = 42;
и не получил ClasscastException

Про какой GC ты говоришь? Что он убирает? Пока программа не свернута - все статик переменные не затираются.
Я не спрашиваю зачем эти фокусы, это наверняка очень секретно, но ведь кастуется нормально (выше код).

Добавлено через 2 минуты
Цитата Сообщение от Grifis Посмотреть сообщение
В MainActivity (главном рабочем, стартовом классе через try-catch создаю экземпляр класса MyApp следующим способом:
Код Java(TM) 2 Platform Standard Edition 5.0
1
MyApp myapp = (MyApp)getapplication();
и да, эта строка не создает экземпляр никакого класса, он уже создан
0
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 39
07.05.2015, 15:45  [ТС] 9
Как примерно должен выглядеть манифест? Есть версия, что с ним что-то не так
0
Pablito
2722 / 2165 / 735
Регистрация: 12.05.2014
Сообщений: 7,572
Завершенные тесты: 1
07.05.2015, 15:49 10
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="ua.com.blabla.package">
 
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme">
        <activity
                android:name=".MainActivity"
                android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
 
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
 
</manifest>
0
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 39
07.05.2015, 15:51  [ТС] 11
То есть вы новый класс, который от application наследует, вообще нигде не прописали?
0
Pablito
2722 / 2165 / 735
Регистрация: 12.05.2014
Сообщений: 7,572
Завершенные тесты: 1
07.05.2015, 15:59 12

Не по теме:

а блин, это из рабочего приложения, я забыл что все почистил
щас верну, проверю и перевыложу



Добавлено через 3 минуты
в том манифесте только одна строка добавилась вот тут
XML
1
2
3
<application
            android:name=".MyApp"
            android:allowBackup="true"
1
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 39
07.05.2015, 16:06  [ТС] 13
Да, надо было под старым тегом application делать, уже понял, раньше делал новый тег в параллель со старым. Все равно спасибо
0
07.05.2015, 16:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2015, 16:06

Java.lang.OutOfMemoryError
Помогите, падает приложение с ошибкой нехватки памяти. Делаю добавление фото из...

Java.lang.IncompatibleClassChangeError и лямбда
Приветствую. Есть обработчик события нажатия кнопки, при тестировании...

Ошибка java.lang.NullPointerException
Возникает ошибка при объявлении строкового массива, я проверил, в файле string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru