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

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

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

Непонятная ошибка Тоста - Программирование Android

28.03.2014, 10:48. Просмотров 597. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятная ошибка Тоста (Программирование Android):

Непонятная ошибка - Программирование Android
Error:Error: Duplicate resources: D:\Education\Программы\passwordgenerator\app\src\main\res\drawable\yandex.png:drawable/yandex,...

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

Непонятная ошибка - Программирование Android
Приложение на каких устройствах работает, а на каких то нет! У меня HTC One V, на нем работает. Так же на: galaxy tab 2, galaxy s 2. А...

непонятная ошибка - Программирование Android
Это мое первое приложение для Android, да и вообще на Java, так что ошибки могут быть самые бредовые. текст ошибки: 05-06...

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

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

3
kirawa
34 / 34 / 1
Регистрация: 12.11.2013
Сообщений: 338
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
373 / 360 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.03.2014, 11:29 #3
В методе onFinish все что там написано, должно вызываться в UI потоке.
0
Tester64
396 / 357 / 43
Регистрация: 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
28.03.2014, 14:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2014, 14:27
Привет! Вот еще темы с ответами:

Непонятная ошибка в Android Studio, парсинг, jsoup - Программирование Android
Прошу помощи, ошибка, возможно будет банальной, т.к. это мое первое приложение в Android Studio. В общем у меня стоит задача реализовать...

Непонятная ошибка - OpenGL
Пожалуйста обьясните смысл этой ошибки на В OpenGl: 'auxInitWindowW' : cannot convert parameter 1 from 'const char ' to 'LPCWSTR'

непонятная ошибка - C++
Начал изучать с++. Все шло хорошо, но потом я столкнулся с проблемой, использовал bass.lib и bass.h. при компиляции выходит такая...

непонятная ошибка - C++
Люди срочно на помощь, в чем касяк // Экзам.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" ...


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

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

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