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

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

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

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

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

Добрый день! Хочу сделать так, чтобы приложение с интервалом в 0,5 сек выводило цифры в столбик (изучаю андроид).
Написал такой код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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");. Почему все падает, если раскомментить и то, и другое?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2011, 22:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему все падает, если раскомментить строку tv.append(" extra"); ? (Программирование Android):

Работа с БД, связывание таблиц "фильмы", "жанры", "режиссеры" - Программирование Android
Ребят, всем привет! накидайте какие-нить идеи по реализации ситуация такая есть таблицы - &quot;списки_жанров&quot;, &quot;фильмы&quot;, &quot;режиссеры&quot; мне...

Почему приложение может пропасть из "Похожие" топового приложения? - Программирование Android
Ранее оно было на 2-ом месте, а теперь пропало вообще(то есть даже не отошло на 10-ое а именно нету)? Может ли такое быть, если куча...

Ошибка "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...

Notification вывод строки с символами перехода на новую строку "\n" - Программирование Android
Здравствуйте, пишу приложение для android 4. В нем service выводит notification в котором текст - это String c несколькими символами...

Как добавить строку "." в начале в ListView со своим обработчиком - Программирование Android
Я в своей базе данных, на каждый новый каталог, дополнительно добавляю запись со строкой &quot;..&quot;, чтобы можно было переходить в верхний...

Постепенно вывести на экран слово "Java", в котором буквы состоят из "интересных" элементов - Программирование Android
Я учусь в универе и вот пытаюсь делать лабораторные по языку java, только на свой телефон с помощью android studio )) До этого все...

6
petruchodd
103 / 102 / 9
Регистрация: 23.06.2009
Сообщений: 561
09.08.2011, 13:03 #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 поэтому код программный без лайоутов. Ну и как всегда.... учи английский и читай туториалы. Потому что без них туго очень.
1
Evg64
2 / 2 / 0
Регистрация: 30.07.2011
Сообщений: 7
11.08.2011, 23:34  [ТС] #3
Спасибо.

1) А есть способ передавать хэндлеру переменные (из того места, где хэндлер вызывается)?
2) Я не понял: почему нельзя менять GUI с потока? Это базовые принципы андроида? А чем это объясняется?
3) Насчет логов: имеется в виду Logcat? В этом Logcat сам черт ногу сломит. Я свой приаттачил для примера. Если кто ткнет носом, как с помощью этого набора букв () можно было идентифицировать проблему самостоятельно, буду оч. благодарен.
1
Вложения
Тип файла: txt logcat.txt (17.4 Кб, 85 просмотров)
petruchodd
103 / 102 / 9
Регистрация: 23.06.2009
Сообщений: 561
12.08.2011, 12:09 #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 и как работать в логкате. Почитайте : кибер форум
1
Evg64
2 / 2 / 0
Регистрация: 30.07.2011
Сообщений: 7
13.08.2011, 18:39  [ТС] #5
1) А, ну да, тут решили)
2) Ок, приму как факт и все)
3) Видимо не время мне еще просто логкат понимать, не привык я пока к нему.
0
petruchodd
24.08.2011, 05:18
  #6

Не по теме:

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

1
Evg64
2 / 2 / 0
Регистрация: 30.07.2011
Сообщений: 7
24.08.2011, 21:54  [ТС] #7
Ну понимание таких вещей, как логкат, со временем приходит, это нормально.
Например, сейчас я уже регулярно смотрю там ошибки и зачастую именно оттуда выясняю, в чем проблема. А со временем, еще лучше буду разбираться. Мне кажется, это почти у всех так происходит.
0
24.08.2011, 21:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2011, 21:54
Привет! Вот еще темы с ответами:

Выбор платформы разработки "1С Мобильная платформа" или "Android Studio" - Программирование Android
Всем, здравствуйте! Есть задача по разработке клиента для терминала сбора данных. Для использования его c WMS. После долгих раздумий было...

При эмулировании вместо надписи "Hello world" отображается "android" - Программирование Android
Привет форумчане! Я только-только начинал программировать на андроиде. Поставил среду, все настроил как на google.developers . Когда...

Как "превратить" string "6.971245e-001" во float? - Программирование Android
Число конечно пример

Как прикрутить "свой браузер" к странице - "фрагмент" - Программирование Android
здравствуйте. все, уже голову сломал. не соображаю совсем. не получается прикрутить код браузера к странице fragments.выводиться должно на-...


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

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

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