Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
1

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

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

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

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

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

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

Непонятная ошибка
JDK и SDK указаны, но Идея ругается на джавовские методы..

Непонятная ошибка
Приложение на каких устройствах работает, а на каких то нет! У меня HTC One...

непонятная ошибка
Это мое первое приложение для Android, да и вообще на Java, так что ошибки...

Непонятная ошибка
Здравствуйте. Есть такая проблемка: При загрузки большого количества...

Непонятная ошибка
Народ! Понимаю что скорее всего сия проблема совсем уже простая, но все же ее...

3
kirawa
35 / 35 / 2
Регистрация: 12.11.2013
Сообщений: 345
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());
1
Netscape
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.03.2014, 11:29 3
В методе onFinish все что там написано, должно вызываться в UI потоке.
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
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() {
                    // выводим тост или диалог...
                }});
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2014, 14:27

Непонятная ошибка
Error:Error: Duplicate resources:...

Непонятная ошибка вылазит в консоль
Приветствую! В консоль разработчика периодически вываливается ошибка, природа...

Непонятная ошибка при запуске приложения в эмуляторе
Использую: Eclipse Juno Service Release 1. Build id: 20120920-0800 Android...


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

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

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