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

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

Войти
Регистрация
Восстановить пароль
 
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,502
#1

Непонятная ошибка Тоста - Android

28.03.2014, 10:48. Просмотров 578. Ответов 3
Метки нет (Все метки)

Пишу свой лонгклик (управляемая длительность, XY диапазон отклонения пальца). Переделываю обработчик OnToch(). С Log.i() все работает. Если попытаться вывести диалог(даже стандартный) или тост - выпадает ошибка. Причем выпадает очень странно - диалог НЕ выводится, в логи падает ошибка с полным текстом, программа НЕ вылетает (работает в обычном режиме дальше).

Ошибка ТАКАЯ:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Помогите понять что за ошибка!

Потоков не использую. Возможно надо вызвать/сэмитировать отжатие пальца?
Тесты на обычном лонгклике - успешно работают (тот-же тост)
При нажатии запускаю таймер и через System.currentTimeMillis() отсчитываю 3000 милисекунд. Потом вызываю свой внешний обработчик через интерфейс (вызываю тост) и таймер останавливаю (cancel).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2014, 10:48     Непонятная ошибка Тоста
Посмотрите здесь:

непонятная ошибка Android
Непонятная ошибка при запуске приложения в эмуляторе Android
Android Непонятная ошибка
Непонятная ошибка Android
Непонятная ошибка Android
Android Непонятная ошибка
Непонятная ошибка в Android Studio, парсинг, jsoup Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
28.03.2014, 11:04     Непонятная ошибка Тоста #2
я делал класс
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
public class MyCount extends CountDownTimer {
 
    ImageButton imageButton;
    boolean aBoolean;
    Context context;
 
    public MyCount(long millisInFuture, long countDownInterval,ImageButton imageButton, boolean b,Context context) это я своих параметров навтыкал{
        super(millisInFuture, countDownInterval);
        this.imageButton = imageButton;
        this.aBoolean = b;
        this.context = context;
    }
    @Override
    public void onTick(long l) {
    }
 
    @Override
    public void onFinish() {
        if (aBoolean){
            int[] pos = new int[2];
            imageButton.getLocationInWindow(pos);
            String s = imageButton.getContentDescription().toString();
            Toast t = Toast.makeText(context, s, Toast.LENGTH_SHORT);
            t.setGravity(Gravity.TOP | Gravity.LEFT, imageButton.getLeft() + 5 ,pos[1] + 20 );
            t.show();
        }
    }
}
и обработчик на кнопкиЖ

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 @Override
    public boolean onTouch(final View view, MotionEvent motionEvent) {
        switch (view.getId()){
            case R.id.imgBntAdd:
                switch (motionEvent.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        btnAdd.setBackgroundColor(color1);
                        time1 = System.currentTimeMillis() / 1000;
                        isDown = true;
                        myCount = new MyCount(1500,1000,btnAdd,true,view.getContext());
                        myCount.start();
                        break;
                    case MotionEvent.ACTION_UP:
                        btnAdd.setBackgroundColor(color2);
                        time2 = System.currentTimeMillis() / 1000;
                        myCount.cancel();
                        if (time1 + 1 - time2 > 0){
                        startActivityNote();
                        }
                    break;
                }
                break;
Здесь я фон кнопки меняю при нажатии, если клик меньше 1 сек то startActivityNote(); можно чо нить другое, а если клик 1,5 сек то вызывается Toast
длительность тут можно менять myCount = new MyCount(1500,1000,btnAdd,true,view.getContext());
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.03.2014, 11:29     Непонятная ошибка Тоста #3
В методе onFinish все что там написано, должно вызываться в UI потоке.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,502
28.03.2014, 14:27  [ТС]     Непонятная ошибка Тоста #4
за MyCount спасибо - оригинальный метод... свою ошибку пока не понял, но по Ваш класс запустить удалось - все работает - типа виндового хинт получается
Попробую по Вашему принципу перебрать свои методы...

Добавлено через 1 час 39 минут
ВСЕ! ПОЛУЧИЛОСЬ! Решение у меня давно было, просто не думал что и здесь это необходимо:
Java
1
2
3
4
5
    private Handler Tread1_Handler = new Handler();// глобальная
 
                Tread1_Handler.post(new Runnable() {public void run() {
                    // выводим тост или диалог...
                }});
Yandex
Объявления
28.03.2014, 14:27     Непонятная ошибка Тоста
Ответ Создать тему
Опции темы

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