Форум программистов, компьютерный форум CyberForum.ru

Java.lang.ClasscastException - Android

Восстановить пароль Регистрация
 
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 24
06.05.2015, 15:21     Java.lang.ClasscastException #1
Пишу на андроид, но не суть. Есть один класс, наследующий от application, например MyApp. В MainActivity (главном рабочем, стартовом классе через try-catch создаю экземпляр класса MyApp следующим способом:
Java
1
MyApp myapp = (MyApp)getapplication();
В результате выбрасывает с java.lang.ClasscastException. Погуглил, в итоге в манифесте прописал строчку вида
<application android:name=".MyApp" > />. Абсолютно ничего не изменилось. Ума не приложу как исправить. Заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
06.05.2015, 23:25     Java.lang.ClasscastException #2
Grifis, что-то вы сложное для новичка взяли. Объясните цель действий, а мы вам расскажем, как всё переделать.
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 24
07.05.2015, 05:49  [ТС]     Java.lang.ClasscastException #3
CoolMind, мне нужно тупо сделать глобальную переменную, чтобы она не дохла от гарбадж коллектора. Нашёл что можно сделать через неубиваемый класс наследующий от application, не получилось
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
07.05.2015, 08:32     Java.lang.ClasscastException #4
Grifis, это можно, но опасно. Работал в разных языках с глобальными переменными, в большинстве случаев приводят к разным трудно исправляемым ошибкам. Обычно для передачи данных через формы используются параметры (в конструкторах форм).
В вашем случае можно посоветовать статическую переменную, причём её можно поместить не только в отдельный модуль, но даже в активность. Если программа завершится, или активность пересоздастся, такая переменная сохранит своё значение. К сожалению, при следующем запуске она снова будет иметь то же значение, пока не перезапустится JVM. Поэтому можно дополнительно предусмотреть проверку на запуск программы и повторную инициализацию этой переменной.
Но вообще надо смотреть, чего вы хотите. Возможно, такой потребности и нет вовсе. Также вы можете сохранять некоторые значения в SharedPreferences.
Паблито
07.05.2015, 08:35
  #5

Не по теме:

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

Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 24
07.05.2015, 11:48  [ТС]     Java.lang.ClasscastException #6
CoolMind, в Shared сохранять не могу из-за закрытости данных (типа конфиденциальность). Со статиком как раз таки опасней, много почитал про него, тошнит уже от NPE, не хочу опять потом баги искать. Насчёт "фигни с умным видом" - Вы бы посоветовали сначала что-нибудь, а потом уже критиковали. Я точно знаю какой вылезает экспепшн, решение на поверхности, но до меня пока не доходит. Разве Статик переменная сохраняет своё значение после смерти активности/приложения? Бред, если честно
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
07.05.2015, 13:11     Java.lang.ClasscastException #7
Grifis, к сожалению, это особенность Андроида. Я тоже долго мучался из-за того, что статические переменные уничтожаются только с завершением JVM.
В общем, я ничего не понял из вашего рассказа. Сделайте тогда отдельный класс, который бы создавался при запуске и завершался при завершении программы (что является отдельной проблемой). В нём и храните переменную. Только это всё равно ненадёжно.
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
07.05.2015, 13:34     Java.lang.ClasscastException #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();
и да, эта строка не создает экземпляр никакого класса, он уже создан
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 24
07.05.2015, 15:45  [ТС]     Java.lang.ClasscastException #9
Как примерно должен выглядеть манифест? Есть версия, что с ним что-то не так
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
07.05.2015, 15:49     Java.lang.ClasscastException #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>
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 24
07.05.2015, 15:51  [ТС]     Java.lang.ClasscastException #11
То есть вы новый класс, который от application наследует, вообще нигде не прописали?
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
07.05.2015, 15:59     Java.lang.ClasscastException #12

Не по теме:

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



Добавлено через 3 минуты
в том манифесте только одна строка добавилась вот тут
XML
1
2
3
<application
            android:name=".MyApp"
            android:allowBackup="true"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2015, 16:06     Java.lang.ClasscastException
Еще ссылки по теме:

Java.lang.OutOfMemoryError на Samsung Galaxy Android
Android Ava.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] link.stuzer.stattrack.data
Java.lang.NumberFormatException: Invalid double Android
Ошибка java.lang.NullPointerException Android
Android Java.lang.OutOfMemoryError

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

Или воспользуйтесь поиском по форуму:
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 24
07.05.2015, 16:06  [ТС]     Java.lang.ClasscastException #13
Да, надо было под старым тегом application делать, уже понял, раньше делал новый тег в параллель со старым. Все равно спасибо
Yandex
Объявления
07.05.2015, 16:06     Java.lang.ClasscastException
Ответ Создать тему
Опции темы

Текущее время: 02:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru