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

Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Muhammad97
 Аватар для Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 04:32     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #1
Здравствуйте, хотел немного сократить код программы, создав метод, который принимает на вход View и Integer
Java
1
2
3
4
5
6
7
8
//Сам метод
public
 void fvbi(Button v, int id) {
        v = (Button) findViewById(id);
    }:
 
//Вызов метода
fvbi(knopka1, R.id.knopka1);
При запуске приложения выдается ошибка "Unfortunately, MyApp has been stopped".
Объясните, пожалуйста, в чем ошибка и вообще возможно ли это реализовать. Если да, то выложите, пожалуйста, код
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 04:32     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped"
Посмотрите здесь:

Android "The application Butt (process.com.samples.Butt) has stopped unexpectedly. Please try again"
Android "Unfortunately, testApp has stopped"
Android Часы для Android и ошибка "unfortunately clock has stopped"
Реализация кнопок "Поделиться в соцсетях" в Android приложении Android
Android Исправить ошибку "Unfortunately appname has stopped"
Android Как отловить причину "unfortunately, application has stopped" на эмуляторе?
Connect to MS SQL и ошибка "unfortunately has stopped" Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
18.06.2014, 05:00     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #2
А в каком классе вызывали? И вообще немного криво... я бы сделал так:
Java
1
2
3
4
public Button fvbi(int id) {
        return (Button) findViewById(id);
}; //кстати... точка с запятой в конце...а не двоеточие!
Button knopka1 = fvbi(R.id.knopka1);
Если в чужом классе, то нужно еще активити указать..
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
18.06.2014, 05:01     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
А в каком классе вызывали? И вообще немного криво... я бы сделал так:
Java
1
2
3
4
public Button fvbi(int id) {
        return (Button) findViewById(id);
}; //кстати... точка с запятой в конце...а не двоеточие!
Button knopka1 = fvbi(R.id.knopka1);
Если в чужом классе, то нужно еще активити указать..
Muhammad97
 Аватар для Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 05:27  [ТС]     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #4
А по другому никак? Чтобы можно было вызывать метод, передав ему всего два параметра
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.06.2014, 10:56     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #5
Muhammad97, можно через generics:

Java
1
2
3
private <T extends View> T findView(int id, Class<T> clazz) {
        return clazz.cast(findViewById(id));
}
и вызов:
Java
1
ImageView imageView = findView(R.id.imageView, ImageView.class);
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
18.06.2014, 12:42     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #6
Цитата Сообщение от Muhammad97 Посмотреть сообщение
А по другому никак?
Ява не особо поддерживат понятие процедуры - в основном функции! (сам после дефей переучивался)
Разве что передать параметром составной класс и внутри менять его паблик значения
А зачем Вам именно такая конструкция?
Muhammad97
 Аватар для Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 13:31  [ТС]     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #7
Tester64, хотел поэкспериментировать. YuraAAA, мне не так нужно было. Я хочу просто вызывать метод с двумя параметрами, а внутри метода уже было что-то вроде v = (Button) findViewById(id);
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.06.2014, 14:10     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #8
Muhammad97, там так и есть. Два параметра. ID и класс. Если это всегда Button, то
Java
1
2
3
4
5
Button b = findView(int id);
 
public Button findView(int id) {
return Button.class.cast(findViewById(id));
}
Muhammad97
 Аватар для Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 14:35  [ТС]     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #9
Вы меня не поняли. Я не хочу каждый раз писать:

Java
1
knopka2 = (Button) findView(R.id.knopka2);
Я просто вызывать метод,передав ему два параметра. Примерно так:

Java
1
2
3
4
5
6
7
//Сам метод*
public Button fvbi(Button v, int id) {
* return v = (Button) findViewById(id);
*}
 
//Вызов метода*
fvbi(knopka1, R.id.knopka1);
646kapeh064
 Аватар для 646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 208
18.06.2014, 14:41     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #10
Muhammad97, чем:
Java
1
2
//Вызов метода*
fvbi(knopka1, R.id.knopka1);
отличается от:
Java
1
2
//Вызов метода*
knopka1 = fvbi(R.id.knopka1);
?

Ответ: ничем.

Как уже писали выше, это лучший вариант:
Java
1
2
3
public Button fvbi(int id) {
return (Button) findViewById(id);
}
Muhammad97
 Аватар для Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 16:29  [ТС]     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #11
Вот полный код, с помощью которого можно сократить присваивание:

Java
1
2
3
4
5
6
7
8
9
10
//Создаем массив с id кнопок
int[] bt = {R.id.knopka1};
 
//Сам метод
public Button fvbi(int id) {
* return (Button) findViewById(id);*
* };
 
//Присваиваем кнопку
knopka1 = fvbi(bt[0]);
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.06.2014, 16:56     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #12
Muhammad97, этот код ничего не сокращает.

Добавлено через 27 секунд
ещё и потенциально ошибки можно спровоцировать
Muhammad97
 Аватар для Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 16:57  [ТС]     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #13
Как?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.06.2014, 17:20     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #14
Muhammad97, ошибиться в id, если их в массиве много.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2014, 21:00     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped"
Еще ссылки по теме:

При запуске приложения на эмуляторе: "unfortunately appname has stopped" Android
Как исправить ошибку "Unfortunately, <Program> has stopped"? Android
Android Выбор платформы разработки "1С Мобильная платформа" или "Android Studio"
Android Ошибка "Unknown method "e" of "org.apache.commons.logging.Log"
Постепенно вывести на экран слово "Java", в котором буквы состоят из "интересных" элементов Android

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

Или воспользуйтесь поиском по форуму:
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
18.06.2014, 21:00     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" #15
Цитата Сообщение от Muhammad97 Посмотреть сообщение
Я просто вызывать метод,передав ему два параметра. Примерно так
Еще раз повторяю: В отличии от Делфи (сам с него на яву пришел) увы поблемы с процедурами! И проблемой возврата результата через параметр.
В Делфи это делалось так: procedure name(var outparm: String);
В яве так не делают! Можно, но тяжело... не наглядно, не удобно...
Возвращайте результат из фукнции! Через return !
Проще привыкнуть, чем писать костыли...
Yandex
Объявления
18.06.2014, 21:00     Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped"
Ответ Создать тему
Опции темы

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