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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Evg64
2 / 2 / 0
Регистрация: 30.07.2011
Сообщений: 7
#1

Почему все падает, если раскомментить строку tv.append(" extra"); ? - Программирование Android

07.08.2011, 22:04. Просмотров 1580. Ответов 6
Метки нет (Все метки)

Добрый день! Хочу сделать так, чтобы приложение с интервалом в 0,5 сек выводило цифры в столбик (изучаю андроид).
Написал такой код:
Код
public class AndroidTestActivity extends Activity {
	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.main);
		new Thread(new Runnable(){
			public void run() {		
				TextView tv=(TextView) findViewById(R.id.hello);
				for (int i=1;i<5;i++){	
					//tv.append(" extra");
					try {Thread.sleep(500);} 
					catch (InterruptedException e) {e.printStackTrace();}
				}
			}
		}).start();
	}
}
В таком виде работает, но если раскомментить строку //tv.append(" extra"); - все упадет.
Как вариант, можно закомментить конструкцию try-catch и раскомментить //tv.append(" extra");. Почему все падает, если раскомментить и то, и другое?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2011, 22:04     Почему все падает, если раскомментить строку tv.append(" extra"); ?
Посмотрите здесь:
Почему приложение может пропасть из "Похожие" топового приложения? Android
Notification вывод строки с символами перехода на новую строку "\n" Android
Как добавить строку "." в начале в ListView со своим обработчиком Android
Android Почему падает программа до исполнения основного кода
Android "Attempt to re-open an already-closed object" при работе с SQLite
"Error while reading RSS" при попытке загрузить новости Android
Ошибка "Method call expected" при шифровании RSA Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
petruchodd
90 / 90 / 8
Регистрация: 23.06.2009
Сообщений: 511
09.08.2011, 13:03     Почему все падает, если раскомментить строку tv.append(" extra"); ? #2
на будущее ... есть логи.. где пишуться ошибки. Поверь люди будут быстрей помогать - если будешь вылаживать ошибки, а не "упала/упал" Падает потому что ты пытаешься изменить GUI с потока. (append)Стандартный путь зделать это использовать хандлер (handler)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class sss extends Activity {
      TextView tv;
    protected void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            LinearLayout ll = new LinearLayout(this);
           tv=new TextView(this);
            ll.addView(tv);
            setContentView(ll);
            tv.setTextColor(Color.WHITE);
            new Thread(new Runnable(){
                    public void run() {             
                           
                            for (int i=1;i<5;i++){  
                                Message message = handler.obtainMessage();
                                handler.sendMessage(message);
                                    try {Thread.sleep(500);} 
                                    catch (InterruptedException e) {e.printStackTrace();}
                            }
                    }
            }).start();
    }
    
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message message) {
           tv.append("extra\n"); /// \n что бы в столбик
        }
    };
}
не обращай внимания на создание.. пишу всегда без xml поэтому код программный без лайоутов. Ну и как всегда.... учи английский и читай туториалы. Потому что без них туго очень.
Evg64
2 / 2 / 0
Регистрация: 30.07.2011
Сообщений: 7
11.08.2011, 23:34  [ТС]     Почему все падает, если раскомментить строку tv.append(" extra"); ? #3
Спасибо.

1) А есть способ передавать хэндлеру переменные (из того места, где хэндлер вызывается)?
2) Я не понял: почему нельзя менять GUI с потока? Это базовые принципы андроида? А чем это объясняется?
3) Насчет логов: имеется в виду Logcat? В этом Logcat сам черт ногу сломит. Я свой приаттачил для примера. Если кто ткнет носом, как с помощью этого набора букв () можно было идентифицировать проблему самостоятельно, буду оч. благодарен.
Вложения
Тип файла: txt logcat.txt (17.4 Кб, 85 просмотров)
petruchodd
90 / 90 / 8
Регистрация: 23.06.2009
Сообщений: 511
12.08.2011, 12:09     Почему все падает, если раскомментить строку tv.append(" extra"); ? #4
Цитата Сообщение от Evg64 Посмотреть сообщение
Спасибо.

1) А есть способ передавать хэндлеру переменные (из того места, где хэндлер вызывается)?
2) Я не понял: почему нельзя менять GUI с потока? Это базовые принципы андроида? А чем это объясняется?
3) Насчет логов: имеется в виду Logcat? В этом Logcat сам черт ногу сломит. Я свой приаттачил для примера. Если кто ткнет носом, как с помощью этого набора букв () можно было идентифицировать проблему самостоятельно, буду оч. благодарен.
1. Врать не буду, не знаю. Но что мешает обьявить глабально и использовать эту переменную ?
2. Тут тяжело обьяснить. Если кратко ... то так написано на форумах, туториалах и всяких гайдах)
примерная вырезка
XML
1
2
3
4
5
6
7
If you need to update the UI from a background task you need to use some Android specific classes. You can use the class "android.os.Handler" for this or the class "AsynTasks".
 
2.2. Handler
 
The class "Handler" can update the UI. A handle provides methods for receiving messages and for runnables. To use a handler you have to subclass it and overide handleMessage() to process messages. To process runables you can use the method post(); You only need one instance of a handler in your activity.
 
You thread can post messages via the
3. да именно логкат. В вашем логе и я ногу сломал, вот теперь только сидеть могу. Вот в этой теме я давал ссылки на DDMS и как работать в логкате. Почитайте : кибер форум
Evg64
2 / 2 / 0
Регистрация: 30.07.2011
Сообщений: 7
13.08.2011, 18:39  [ТС]     Почему все падает, если раскомментить строку tv.append(" extra"); ? #5
1) А, ну да, тут решили)
2) Ок, приму как факт и все)
3) Видимо не время мне еще просто логкат понимать, не привык я пока к нему.
petruchodd
24.08.2011, 05:18
  #6

Не по теме:

Почему не время ?) Вам не нужно всё читать, читать начнете пожже, а для начала если только учитесь или что то в єтом роде, вам достаточно научиться смотреть ошибку там .Когда ваше апп вылетает, всё можна найти там. Зачастую это огромный блок(от 5 до 20- и до огого строк в столбец). Там россписано, что от какого файла куда обратилось и где начало ломаться. Этого вам будет достаточно что бы быстрей учиться.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2011, 21:54     Почему все падает, если раскомментить строку tv.append(" extra"); ?
Еще ссылки по теме:
Android Как поместить surfaceview или glsurfaceview на "пол" экрана
SQLite, ошибка: не существует поля "почта" в базе данных Android
Android Осуществить парсинг JSON с помощью готового макета "VKApiMessage"
Отключить перескакивание между edittext после нажатия "готово" Android
При компиляции вылазит ошибка Installation error: "INSTALL_FAILED_CPU_ABI_INCOMPATIBLE" Android

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

Или воспользуйтесь поиском по форуму:
Evg64
2 / 2 / 0
Регистрация: 30.07.2011
Сообщений: 7
24.08.2011, 21:54  [ТС]     Почему все падает, если раскомментить строку tv.append(" extra"); ? #7
Ну понимание таких вещей, как логкат, со временем приходит, это нормально.
Например, сейчас я уже регулярно смотрю там ошибки и зачастую именно оттуда выясняю, в чем проблема. А со временем, еще лучше буду разбираться. Мне кажется, это почти у всех так происходит.
Yandex
Объявления
24.08.2011, 21:54     Почему все падает, если раскомментить строку tv.append(" extra"); ?
Ответ Создать тему
Опции темы

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