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

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

Войти
Регистрация
Восстановить пароль
 
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Перегрузка OnCreate - Программирование Android

12.09.2016, 01:09. Просмотров 211. Ответов 10
Метки нет (Все метки)

Гуру ООП, помогите исправить "конфликт"

Написал свой класс-предок для активити(MyActivity), где в onCreate добавил несколько дополнительных полей для работы с XML и с обработкой ошибки. От него наследую мои "рабочие" активити.

MyActivity наследуется от FragmentActivity
Java
1
2
3
4
    public void onCreate(Bundle savedInstanceState, String err_id, int ContextView_id) {
       super.onCreate(savedInstanceState);
       // дальше мои "доработки"
    }
В рабочем активити делаю так:
Java
1
2
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState, "Error_3924829", R.layout.frm_main);
(так удобнее)

В результате все работает, но в Студии строка public void onCreate(Bundle savedInstanceState) { светится ошибкой!
Среди предложений можно перед public void onCreate(Bundle savedInstanceState) { поставить @SuppressLint("MissingSuperCall")
тогда красный гаснет, но это... подозрительно что-ли... Не знаю как оно поведет себя в разных версиях SDK.

Кто знает, можно ли убрать ошибку еще на уровне предка?
Что означает/делает @SuppressLint("MissingSuperCall")?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2016, 01:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка OnCreate (Программирование Android):

NullPointer в OnCreate - Программирование Android
Наверное типичный вопрос, но вылетает ошибка в: Caused by: java.lang.NullPointerException ...

OnCreate вызывается дважды - Программирование Android
Добрый день. Делаю простое приложение, которое при нажатии на кнопку, с помощью Intent должно переходить на следующее активити. Но проблема...

viewPager onCreate method - Программирование Android
Всем здрасьте, возник следующий вопрос по ViewPager: Создаю viewPager и заполняю его в методе OnCreate главной активити: ...

Вызов метода в onCreate() - Программирование Android
Здравствуйте.Пытаюсь загружать сохраненные данные при старте приложения и сохранять при выходе с помощью Preferences. Добавлял написанные...

Программа вылетает в методе OnCreate - Программирование Android
Программа вылетает со следующей ошибкой: 586-3586/spsoft.myapplication E/AndroidRuntime: FATAL EXCEPTION: main ...

Подскажите - программа вылетает в OnCreate - Программирование Android
Я действительно совершенно безпонятия от чего она это делает! Программа вылетает на super.onCreate(savedInstanceState); Вот лог ошибки: ...

10
Lumber
99 / 99 / 37
Регистрация: 02.12.2015
Сообщений: 239
12.09.2016, 01:27 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Правильно, onCreate(Bundle) обязан вызвать super.onCreate(Bundle).
А он вызывает какой-то левый
onCreate(Bundle, String, int)
поэтому предупреждение

нафига вообще было перегружать onCreate()? лучше сделать свой метод со своим именем и туда разместить "доработки". и вызывать его без "super". (super и сейчас писать не обязательно - т.к. этот метод не переопределяется, а перегружается).

Совпадение имени только сбивает с толку. Фактически этот метод к оригинальному onCreate никакого отношения не имеет.
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
12.09.2016, 01:34  [ТС] #3
Цитата Сообщение от Lumber Посмотреть сообщение
Совпадение имени только сбивает с толку
как раз в имени дело... оно привычное, его тяжело "потерять"... Но Вы наверное правы... попробую сделать некое init(,,) в котором буду вызывать предок с параметрами...

может все-таки можно стандартное перекрыть? ведь РАБОТАЕТ! просто РЕДАКТОР предупреждает об ошибке, но компилятор этой ошибки не замечает...
0
Lumber
99 / 99 / 37
Регистрация: 02.12.2015
Сообщений: 239
12.09.2016, 01:45 #4
можно в MyActivity сделать абстрактные геттеры для параметров "Error_3924829" и R.layout.frm_main
и тогда в наследниках их нужно будет обязательно реализовать и соответственно эти значения не потеряются.

а init() вызывать из onCreate(Bundle) в MyActivity.
а onCreate в наследниках реализовывать стандартным образом.

Тогда невозможно будет забыть вызвать init() и невозможно будет забыть предоставить значения для него.
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
12.09.2016, 02:28  [ТС] #5
Цитата Сообщение от Lumber Посмотреть сообщение
Тогда невозможно будет забыть вызвать init()
Сделал проще!
в предке перед public void onCreate(Bundle savedInstanceState) { поставил @Deprecated - это ЗАЧЕРКИВАЕТ все мои "стандартные" onCreate
сделал protected void _init(Bundle savedInstanceState, String err_title, int ContextView_id){
который "якрко" виден в списке благодаря "_" и в котором реализую всю мою старую начинку onCreate
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
12.09.2016, 03:36 #6
Вообще-то @Deprecated обозначает, что когда-нибудь это перестанет работать. Или я не прав?
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
12.09.2016, 04:25  [ТС] #7
Цитата Сообщение от OlegJV Посмотреть сообщение
Вообще-то @Deprecated обозначает, что когда-нибудь это перестанет работать. Или я не прав?
Так оно и есть! Поэтому система ПРЕДУПРЕЖДАЕТ программиста наглядно зачеркивая эту функцию когда я ее использую! В том числе и в боковом списке методов! Тяжело ошибиться и начать переопределять этот метод и проще вспомнить что вместо onCreate( надо переопределить _init(
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
12.09.2016, 04:30 #8
Так а зачем писать то, что потом не будет работать? Абстрактный init имхо лучше...
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
12.09.2016, 05:24  [ТС] #9
Цитата Сообщение от OlegJV Посмотреть сообщение
Так а зачем писать то, что потом не будет работать? Абстрактный init имхо лучше...
Ты не прочитал пост выше??? Попробуй сам приписать ЛЮБОМУ методу @Deprecated и посмотри как поведет себя СТУДИЯ! На производительность это не влияет! А я и так использую init! просто есть старые активити в нескольких проектах(один myActitity.java использую во всех проектах), которые надо перебрать и исправить - так оно куда удобнее!
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
12.09.2016, 05:32 #10
Извиняюсь, не сразу понял смысл. Но все равно способ, мягко говоря, сомнительный по моему мнению. Он-то рабочий. Но сомнительный.
P.S: Мозг уже не соображает, я тут полночи бился с неработающим датчиком освещенности. Только что выяснил - в используемом телефоне нет этого датчика )))))
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
12.09.2016, 06:14  [ТС] #11

Не по теме:

Цитата Сообщение от OlegJV Посмотреть сообщение
я тут полночи бился
аналогично! я сегодня поисправлял все конфликты которые БЕСИЛИ уже несколько месяцев в нескольких проектах и добавил еще несколько функций в собственную ORM


попробую еще раз! есть КУЧА активити, в которых используется МОЙ предок для активити. У всех много кода в onCreate. Надо ВСЕХ переписать. Благодаря @Deprecated в предке у onCreate я СРАЗУ вижу какое активити надо переписать/перебрать (стоит его открыть) - студия явно показывает ошибку в списке методов и в коде!
0
12.09.2016, 06:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2016, 06:14
Привет! Вот еще темы с ответами:

Один объект класса в onCreate и onClick - Программирование Android
Здравствуйте! Описал класс, реально ли, чтобы один метод класса выполнялся в onCreate, а другой в onClick? Т.к. сейчас создавая объект у...

Не передаются данные между onCreate и onResume - Программирование Android
Значение переменной изменяется после загрузки. НО! В onCreate есть TextView который использует это значение. Но судя по размеру текста, оно...

После засыпания вызывается onCreate и onRestoreInstanceState - Программирование Android
Привет. После засыпания вызывается onCreate и onRestoreInstanceState, зачем они вызываются и как обойти? У меня программа для работы...

Что делает строка super.onCreate(savedInstanceState)? - Программирование Android
подскажите, начинающему программисту под android, что делает строка super.onCreate(savedInstanceState); как она работает? заранее...


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

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

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