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

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

18.06.2014, 04:32. Просмотров 1448. Ответов 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"
Задали лабораторную по создания приложения часов для андроид. По скольку ни с...

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

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

Как отловить причину "unfortunately, application has stopped" на эмуляторе?
Приветствую всех! Помогите разобраться. Пытаюсь убрать заголовок ...

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

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

14
Tester64
396 / 357 / 46
Регистрация: 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 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
18.06.2014, 05:01 #3
Лучший ответ Сообщение было отмечено Muhammad97 как решение

Решение

А в каком классе вызывали? И вообще немного криво... я бы сделал так:
Java
1
2
3
4
public Button fvbi(int id) {
        return (Button) findViewById(id);
}; //кстати... точка с запятой в конце...а не двоеточие!
Button knopka1 = fvbi(R.id.knopka1);
Если в чужом классе, то нужно еще активити указать..
1
Muhammad97
10 / 10 / 2
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 05:27  [ТС] #4
А по другому никак? Чтобы можно было вызывать метод, передав ему всего два параметра
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 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 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
18.06.2014, 12:42 #6
Цитата Сообщение от Muhammad97 Посмотреть сообщение
А по другому никак?
Ява не особо поддерживат понятие процедуры - в основном функции! (сам после дефей переучивался)
Разве что передать параметром составной класс и внутри менять его паблик значения
А зачем Вам именно такая конструкция?
0
Muhammad97
10 / 10 / 2
Регистрация: 10.11.2013
Сообщений: 238
18.06.2014, 13:31  [ТС] #7
Tester64, хотел поэкспериментировать. YuraAAA, мне не так нужно было. Я хочу просто вызывать метод с двумя параметрами, а внутри метода уже было что-то вроде v = (Button) findViewById(id);
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 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 / 2
Регистрация: 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 / 16
Регистрация: 09.12.2013
Сообщений: 208
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 / 2
Регистрация: 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
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
18.06.2014, 16:56 #12
Muhammad97, этот код ничего не сокращает.

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

"Unfortunately, testApp has stopped"
package com.illya05_Studio.simplepasssecurity; import android.app.Activity;...

Ошибка "Unknown method "e" of "org.apache.commons.logging.Log"
Unknown method 'e' of 'org.apache.commons.logging.Log' package...

"The application Butt (process.com.samples.Butt) has stopped unexpectedly. Please try again"
работаю на эклипс, программирую калькулятор для android. у меня есть 2...

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


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

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

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