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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
#1

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

18.06.2014, 04:32. Просмотров 1353. Ответов 14
Метки нет (Все метки)

Здравствуйте, хотел немного сократить код программы, создав метод, который принимает на вход 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".
Объясните, пожалуйста, в чем ошибка и вообще возможно ли это реализовать. Если да, то выложите, пожалуйста, код
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 04:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" (Программирование Android):

Часы для Android и ошибка "unfortunately clock has stopped" - Программирование Android
Задали лабораторную по создания приложения часов для андроид. По скольку ни с андройдом ни с явой не работал, пытаюсь разобраться. ...

Connect to MS SQL и ошибка "unfortunately has stopped" - Программирование Android
Привет! Ребята выручите пожалуйста. Скачал jtds, вроде прилинковал к проекту... в манифесте прописал доступ к инету ...

При запуске приложения на эмуляторе: "unfortunately appname has stopped" - Программирование Android
доброго времени суток, друзья, помогите найти ошибку, при запуске приложения на эмуляторе выдает сообщение unfortunately appname has...

Как отловить причину "unfortunately, application has stopped" на эмуляторе? - Программирование Android
Приветствую всех! Помогите разобраться. Пытаюсь убрать заголовок protected void onCreate(Bundle savedInstanceState) { ...

Как исправить ошибку "Unfortunately, <Program> has stopped"? - Программирование Android
Я только начал изучать программирование программ для Android и сразу же после создания приложения Hello World, при запуске приложения на...

Исправить ошибку "Unfortunately appname has stopped" - Программирование Android
Посоветуйте как можно обнаружить причину ошибки &quot;Unfortunatellya Battle has stoped&quot;, как ее исправить ??

14
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
18.06.2014, 05:00 #2
А в каком классе вызывали? И вообще немного криво... я бы сделал так:
Java
1
2
3
4
public Button fvbi(int id) {
        return (Button) findViewById(id);
}; //кстати... точка с запятой в конце...а не двоеточие!
Button knopka1 = fvbi(R.id.knopka1);
Если в чужом классе, то нужно еще активити указать..
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
18.06.2014, 05:01 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
А в каком классе вызывали? И вообще немного криво... я бы сделал так:
Java
1
2
3
4
public Button fvbi(int id) {
        return (Button) findViewById(id);
}; //кстати... точка с запятой в конце...а не двоеточие!
Button knopka1 = fvbi(R.id.knopka1);
Если в чужом классе, то нужно еще активити указать..
1
Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 05:27  [ТС] #4
А по другому никак? Чтобы можно было вызывать метод, передав ему всего два параметра
0
YuraAAA
1576 / 1317 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.06.2014, 10:56 #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);
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
18.06.2014, 12:42 #6
Цитата Сообщение от Muhammad97 Посмотреть сообщение
А по другому никак?
Ява не особо поддерживат понятие процедуры - в основном функции! (сам после дефей переучивался)
Разве что передать параметром составной класс и внутри менять его паблик значения
А зачем Вам именно такая конструкция?
0
Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 13:31  [ТС] #7
Tester64, хотел поэкспериментировать. YuraAAA, мне не так нужно было. Я хочу просто вызывать метод с двумя параметрами, а внутри метода уже было что-то вроде v = (Button) findViewById(id);
0
YuraAAA
1576 / 1317 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.06.2014, 14:10 #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));
}
0
Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 14:35  [ТС] #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);
0
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
18.06.2014, 14:41 #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);
}
1
Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 16:29  [ТС] #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]);
0
YuraAAA
1576 / 1317 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.06.2014, 16:56 #12
Muhammad97, этот код ничего не сокращает.

Добавлено через 27 секунд
ещё и потенциально ошибки можно спровоцировать
0
Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 16:57  [ТС] #13
Как?
0
YuraAAA
1576 / 1317 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.06.2014, 17:20 #14
Muhammad97, ошибиться в id, если их в массиве много.
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
18.06.2014, 21:00 #15
Цитата Сообщение от Muhammad97 Посмотреть сообщение
Я просто вызывать метод,передав ему два параметра. Примерно так
Еще раз повторяю: В отличии от Делфи (сам с него на яву пришел) увы поблемы с процедурами! И проблемой возврата результата через параметр.
В Делфи это делалось так: procedure name(var outparm: String);
В яве так не делают! Можно, но тяжело... не наглядно, не удобно...
Возвращайте результат из фукнции! Через return !
Проще привыкнуть, чем писать костыли...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2014, 21:00
Привет! Вот еще темы с ответами:

"Unfortunately, testApp has stopped" - Программирование Android
package com.illya05_Studio.simplepasssecurity; import android.app.Activity; import android.content.SharedPreferences; import...

Ошибка "Unknown method "e" of "org.apache.commons.logging.Log" - Программирование Android
Unknown method 'e' of 'org.apache.commons.logging.Log' package com.mycompany.myapp; import android.widget.*; import...

"The application Butt (process.com.samples.Butt) has stopped unexpectedly. Please try again" - Программирование Android
работаю на эклипс, программирую калькулятор для android. у меня есть 2 программы, 1 из них: package com.samples.But; import...

Реализация кнопок "Поделиться в соцсетях" в Android приложении - Программирование Android
Есть приложение локально загружающее html страничку и которая показывает текст html страницы в webview. Как сделать кнопку Поделиться...


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

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

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