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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 24
#1

Java.lang.ClasscastException - Программирование Android

06.05.2015, 15:21. Просмотров 510. Ответов 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 (Программирование Android):

Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map - Программирование Android
Ошибка появляется когда пытаюсь вытянуть из кастомного адаптера запись ListView. Весь лог ошибки такой: FATAL EXCEPTION: main Process:...

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

Ava.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] link.stuzer.stattrack.data - Программирование Android
// Print out the database as array public String getAllWeapons(){ String dbString = new String; SQLiteDatabase...

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

java.lang.NoClassDefFoundError - Программирование Android
Не пойму, что не так. DataActivity.java находится в пакете com.example.helper, в манифесте прописано: &lt;activity...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
06.05.2015, 23:25 #2
Grifis, что-то вы сложное для новичка взяли. Объясните цель действий, а мы вам расскажем, как всё переделать.
0
Grifis
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 24
07.05.2015, 05:49  [ТС] #3
CoolMind, мне нужно тупо сделать глобальную переменную, чтобы она не дохла от гарбадж коллектора. Нашёл что можно сделать через неубиваемый класс наследующий от application, не получилось
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
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
Сообщений: 24
07.05.2015, 11:48  [ТС] #6
CoolMind, в Shared сохранять не могу из-за закрытости данных (типа конфиденциальность). Со статиком как раз таки опасней, много почитал про него, тошнит уже от NPE, не хочу опять потом баги искать. Насчёт "фигни с умным видом" - Вы бы посоветовали сначала что-нибудь, а потом уже критиковали. Я точно знаю какой вылезает экспепшн, решение на поверхности, но до меня пока не доходит. Разве Статик переменная сохраняет своё значение после смерти активности/приложения? Бред, если честно
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
07.05.2015, 13:11 #7
Grifis, к сожалению, это особенность Андроида. Я тоже долго мучался из-за того, что статические переменные уничтожаются только с завершением JVM.
В общем, я ничего не понял из вашего рассказа. Сделайте тогда отдельный класс, который бы создавался при запуске и завершался при завершении программы (что является отдельной проблемой). В нём и храните переменную. Только это всё равно ненадёжно.
0
Pablito
2484 / 1929 / 601
Регистрация: 12.05.2014
Сообщений: 6,782
Завершенные тесты: 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
Сообщений: 24
07.05.2015, 15:45  [ТС] #9
Как примерно должен выглядеть манифест? Есть версия, что с ним что-то не так
0
Pablito
2484 / 1929 / 601
Регистрация: 12.05.2014
Сообщений: 6,782
Завершенные тесты: 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
Сообщений: 24
07.05.2015, 15:51  [ТС] #11
То есть вы новый класс, который от application наследует, вообще нигде не прописали?
0
Pablito
2484 / 1929 / 601
Регистрация: 12.05.2014
Сообщений: 6,782
Завершенные тесты: 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
Сообщений: 24
07.05.2015, 16:06  [ТС] #13
Да, надо было под старым тегом application делать, уже понял, раньше делал новый тег в параллель со старым. Все равно спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2015, 16:06
Привет! Вот еще темы с ответами:

Ошибка java.lang.NullPointerException - Программирование Android
Возникает ошибка при объявлении строкового массива, я проверил, в файле string все данные есть Лог ошибки: 07-31 15:25:38.258...

Ошибка java.lang.OutOfMemoryError - Программирование Android
Здравствуйте. В приложении частенько выскакивает ошибки java.lang.OutOfMemoryError BitmapFactory.nativeDecodeAsset() и...

Java.lang.NumberFormatException: Invalid double - Программирование Android
Android приложение, в котором нужно построить график. Для этого я получаю с помощью AsyncTask(парсинг XML) значения типа String, но мне их...

Java.lang.OutOfMemoryError на Samsung Galaxy - Программирование Android
Play Google в разделе Сбой показывает ошибку java.lang.OutOfMemoryError. С ней более-менее все понятно. Но по чему она вылетает...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.05.2015, 16:06
Ответ Создать тему
Опции темы

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