|
2 / 0 / 1
Регистрация: 11.02.2012
Сообщений: 31
|
|
Запрет многократных нажатий на кнопку29.09.2012, 21:26. Показов 3188. Ответов 7
Метки нет (Все метки)
Добрый вечер
Столкнулся с такой проблемой: при работе клиента на j2me (сокеты, связь с асинхронным сервером) пользователи частенько умудряются нажать на одну и ту же кнопку несколько раз, то есть, как пример, в окне выбора продукта успевают нажать кнопку "Выбрать" 3-4 раза до того момента, пока данные уйдут серверу, обработаются, вернутся и обновят экран - в результате серверу уходят те самые 3-4 запроса на выполнение одной и той же операции, от чего хотелось бы уйти. Как можно поступить в данном случае? Есть несколько идей, но в каждой видны жёсткие недочёты: 1 - в конце обработчика каждого нажатия блокировать или вообще удалять кнопку; 2 - в каждом обработчике вешать счётчик нажатий, и проверять, не нажималась ли ещё эта кнопка, и если нажатие уже было - не выполнять действий, а после каждого обновления экрана счётчики на кнопках обнулять; 3 - завести какой-нибудь таймер, и разрешать нажатия только раз в секунду (не особо пока понимаю, как такое будет работать - но это лишь идея). Но может я всё усложняю и есть настройки мидлета, которые запрещают жать часто кнопки? Потому что, например, если по первому пункту блокировать кнопку - многократное хардварное нажатие на первом экране после обновления и появления новых кнопок нажмёт одну из кнопок второго экрана, аналогично и второй пункт. Заранее спасибо
0
|
|
| 29.09.2012, 21:26 | |
|
Ответы с готовыми решениями:
7
Переместить кнопку по углам формы и посчитать количество нажатий на кнопку Запрет нажатий клавиш Запрет нажатий на объекты |
|
2 / 0 / 1
Регистрация: 11.02.2012
Сообщений: 31
|
|||||||||||
| 30.09.2012, 19:45 [ТС] | |||||||||||
|
Идея заманчивая, но, на мой взгляд, немного затратная: основных форм - около 5, и все с разнородным содержимым. Т.е., имеется и выбор из списка, где данные по мере появления подгружаются с сервера, и логин-пароль, где периодически жмут 2-3 раза Войти, и просто отправка одного значения (типа суммы или количества).. Я что-то подобное рассматривал (хотел запоминать сгененированную для отправки текстовую строку, и уже потом её сравнивать) - но отмёл как неэффективную.
Придумал ещё вариант с некоей заглушкой - при нажатии кнопки отправки отображать форму с текстом "обработка..", а уже при получении обработанных данных с сервера отображать то, что нужно. Но всё равно ни один из этих вариантов (CRC, заглушка) не оберегает от нажатия кнопки на полученном с сервера окне при многократном нажатии клавиш на предыдущем окне (пример: в списке выбора заказа жмём много раз кнопку Выбрать, данные уходят, обрабатываются, прорисовывается новое окно уже со своей кнопкой, и происходит непроизвольное нажатие на эту новую кнопку). То есть эту ситуацию уже можно и не обрабатывать - вина клиента, что не смотрит, на что жмёт - но было бы интересно знать, есть ли варианты, не допускающие такого. Добавлено через 6 часов 45 минут Выявил ещё один нюанс: если зажать кнопку и не отпускать, то обрабатывается это как многократные нажатия, самое страшное - с частотой большей, чем простые нажатия. В такой ситуации запоминание отправляемой строки или CRC корректно не срабатывают - процентах в 20 случаях строка отправляется более 1 раза (тестирую сейчас на nokia 6300). Поэтому попробовал вставить заглушку - работает на удивление приятно и безглючно, органично вписалось. Но всё равно на общем фоне повис вопрос: почему многократные нажатия или зажатие кнопки в нижеуказанном коде допускает огрехи и производит двойную отсылку данных (аналогично испробован способ счётчика нажатий, который выдаёт такой же результат):
0
|
|||||||||||
|
|
|
| 30.09.2012, 19:54 | |
|
не понимаю я вашей проблемы, мне кажется вы создаёте себе сами условия для трудностей:
1. считать crc32 быстро можно сдвигами 2. почему отправка данных должна идти синхронно нажатиям? создайте очередь и продюсьте туда нажатия, а консьюмер будет считать crc (или что там вам больше по душе) и решать делать ли post, это могут быть 2 независимых потока и всё будет ок
1
|
|
|
2 / 0 / 1
Регистрация: 11.02.2012
Сообщений: 31
|
|
| 30.09.2012, 20:17 [ТС] | |
|
В j2me с CRC32 вообще не работал (это мой первый проект, не только j2me - но и java в любых проявлениях), поэтому стараюсь усложнять всё чем меньше, тем лучше.. И про консьюмер поэтому тоже не слышал, и не знаю, как это всё с наименьшими затратами (по времени и по ресурсоёмкости) внедрить
Потоков для нужд миддлета у меня уже 4 штуки есть, плюс 3 таймера (1 постоянный и 2 включаются/отключаются по мере работы), поэтому создавать ещё и очередь.. Не сильно ли накладно? Все ли телефоны нормально потянут такое? Трудностей я и правда наворотил, разгрести и сделать по-человечески уже немало времени займёт - например, из обработчиков 15 моих кнопок 9 отправляют какие-то данные, из них 5 сначала отправляют, потом по получении данных формируют соответствующую форму, а 4 сначала рисуют формы (в том числе и списки), а уже по получении данных заполняют их значениями, делают видимыми-невидимыми соответствующие поля и пр. Поэтому как сюда очередь запилить - пока без понятия, браться пока не буду - сначала всё заведу таким топорным методом (нажали кнопку - отправили данные-данные обработали-данные отрисовали), внедрю, а когда будет свободное время - перепишу всё как и должно было быть с самого начала.
0
|
|
|
|
|
| 30.09.2012, 21:11 | |
|
1
|
|
|
2 / 0 / 1
Регистрация: 11.02.2012
Сообщений: 31
|
|
| 04.10.2012, 11:45 [ТС] | |
|
Шикарная штука
)))) Спасибо за ссылку, по коду всё ясно, попозже внедрю именно такой вариант
0
|
|
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
|
| 04.10.2012, 13:02 | |
|
Может я чего не понимаю в javaME - но почему нельзя после первого нажатия на кнопку заблокировать ее до получения ответа от сервера??
0
|
|
| 04.10.2012, 13:02 | |
|
Помогаю со студенческими работами здесь
8
Подсчет нажатий на кнопку
Подсчет нажатий на кнопку+ Количество нажатий на кнопку Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|