0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
|
|
1 | |
Нужен совет по правильной логике для авторизации пользователя при запуске приложения29.04.2016, 19:58. Показов 2920. Ответов 20
Метки нет (Все метки)
Новичок в java и android, так что прошу сильно не пинать за терминологию
Итак. Хочу ради самообучения сделать приложение, которое будет при старте (сразу после показа основного layout) пытаться авторизоваться на веб-сервере: для этого отправлять запрос get вида http//myserver/auth?l=login&p=password (логин и пароль читаются из сохраненных настроек) и дожидаться ответ. Если логин и пароль не заданы или авторизация на сервере не успешна, то выводить на экран активити с полями ввода логина, пароля и кнопками "войти" и "закрыть". По кнопке "Войти" - попытка авторизации на сервере. Если успешна, то возврат на основное активити, если не успешна - остаемся на активити с вводом логина/пароля. По кнопке "Закрыть" надо закрыть все приложение. На данный момент есть основное активити Main, есть активити с Логином/Паролем actAuth, есть класс сохраняющий и получающий настройки. На данный момент сделал только так: в Main в OnCreate запускаю процесс авторизации с помощью AsyncTask. Но поскольку результат получаю с помощью .get() то пока не пройдет процесс авторизации или не кончится тайм-оут основное окно не отрисовано и кажется, что приложение висит. Пытался вывести информацию через ProgressDialog, но он тоже отрисовывается только после процесса авторизации - оно и понятно весь UI заблокирован из-за .get() Подскажите правильную архитектуру подобной задачи, или ссылку на исходники где есть подобная логика. Спасибо. Добавлено через 7 минут Добавлю: В onResume у Main проверял: если нет авторизации, то закрывал приложение через finish() т.к. в onResume исполнение попадало только если активити с логином/паролем закрывалось...
0
|
29.04.2016, 19:58 | |
Ответы с готовыми решениями:
20
Авторизация пользователя при запуске приложения. Домен Нужен совет в выборе языка для приложения Нужен совет по выбору шаблона для веб приложения Ребят нужен технический совет по созданию приложения для для вывода ошибок с сервера |
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
|
|
29.04.2016, 20:14 | 2 |
попробуйте через socket - тема рядом. можно сразу на онкрейт запускать
после загрузки меняете содержимое или новый активити вызываете.
0
|
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
|
|
29.04.2016, 20:18 [ТС] | 3 |
Я уже думал о сокетах, но мне кажется вопрос не в методике передачи данных, а в принципе в архитектуре - я понимаю, что не правильно запускать процесс авторизации в onCreate напрямую, ибо активити даже не отрисовывается тогда. Точнее авторизацию надо запускать именно в onCreate, но видимо в отдельном потоке, а результат отлавливать отдельно вообще.. .видимо через handler как-то... вот и не могу пока сообразить как правильно всё организовать..
0
|
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
|
|
29.04.2016, 20:52 | 4 |
Запустите создание активити, потом включите какую-нибудь анимацию, даже обычный индикатор загрузки, выведите пользователю подсказку, типа "идет запрос на сервер...". После этого посылайте свой запрос на сервер и обрабатываете ответ. Конечно, запрос на сервер и обработка ответа должна идти как минимум в асинктаске.
0
|
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
|
|
29.04.2016, 20:54 [ТС] | 5 |
Alexvp, дык не выводится ничего, из-за того, что авторизация идет в onCreate и еще не отрисован даже основной лайоут... Пытался вывести ProgressDialog.... ничего
0
|
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
|
|
29.04.2016, 20:58 | 6 |
Так сначала отрисуйте лайоут, в нем выведите индикатор, а потом посылайте запрос.
Добавлено через 1 минуту Поставьте себя на место пользователя. Вы долго будете ждать старта приложения? Поэтому вначале надо что-то показать пользователю, а потом делать скрытый процесс.
0
|
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
|
|
29.04.2016, 20:59 [ТС] | 7 |
Вот код:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); appSettings = PreferenceManager.getDefaultSharedPreferences(this); setContentView(R.layout.main); ..сразу после этого выводился ProgressDialog и запускался процесс авторизации. (к сожалению уже переделал код) Так при старте был просто белый экран до окончания процесса авторизации Добавлено через 33 секунды и только после процесса авторизации показывался диалог с прогрессом...
0
|
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
|
|
29.04.2016, 21:01 | 8 |
Концептуально неверно. Если пользователь запустил приложение, то он ожидает что-то увидеть. Для этого прогрессбар и придуман.
0
|
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
|
|
29.04.2016, 21:03 [ТС] | 9 |
Так я и пишу же: сначала я пытался вывести прогрессбар, и только потом запускал процесс авторизации.. а в результате получал при старте приложения белый экран, который висел до конца процесса авторизации и только затем показывался прогрессбар и сам основной лайоут.. Я и пытаюсь с этим бороться!
0
|
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
|
|
29.04.2016, 21:09 | 10 |
работа с сокетом никак не зависит от прорисовки активити.
те грузите приветствие - активити намбер ван(параллельно, но асинхронно работает сокет у которого есть таймаут, например 2 сек), если сокет авторизуется, то грузится активити намбер ван, если таймаут, то окошко регистрации. и сокет и програссбар запускайте, когда все прорисуется так красивее будет.
0
|
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
|
|
29.04.2016, 21:09 | 11 |
Дорогой, я уже третий раз вам толкую. Чтобы вместо белого экрана пользователь что-то видел, то ему это надо показать. Процесс запроса на сервер обычно требует с десяток секунд. Примерно столько висит ваш белый экран. Бороться с этим бесполезно, так как приложение ожидает ответа от сервера для определения дальнейших шагов. Поэтому, если вас раздражает пустой экран (он и пользователя будет раздражать), то перед запросом на сервер покажите что-то на экране.
0
|
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
|
|
29.04.2016, 21:15 | 12 |
что это за сервера такие лютые, которые авторизуют за 10 секунд? таймаута в 2 сек более чем достаточно, ну 5... и то никуда не годится
0
|
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
|
|
29.04.2016, 21:27 | 13 |
SergioO,
Дело не только в самом сервере, но и в каналах связи. Для своих приложений я закладываю максимальный тайм-аут порядка 15 секунд. Хотя обычно хватает 1-3 сек. P.S. Для целей безопасности, защита от подбора паролей, на сервере я делаю принудительный тайм-аут в 2 секунды. Это плюс к обычной задержке.
0
|
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
|
|
29.04.2016, 21:31 [ТС] | 14 |
Так. Давайте по-порядку... Мух от котлет..
В какой момент надо запустить процесс авторизации если не в onCreate ? Если я его запускаю в онкрейт, то активити не отрисовывается до окончания процесса, не смотря на то, что процесс запускается последней строкой в онкрейт
0
|
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
|
||||||
29.04.2016, 21:39 | 15 | |||||
Примерно так:
0
|
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
|
|
29.04.2016, 21:45 | 16 |
у меня активити отработало за 2,48 секунды. притом что там циклически еще по странице пробежала и плюсовала строки + параллельно в консоль писала и тд.
0
|
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
|
|
29.04.2016, 21:49 [ТС] | 17 |
Alexvp, прогрессбар на лайоуте лежит? а я всплывающим окном с крутилкой пытался.. оно вообще не показывается до окончания авторизации
0
|
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
|
|
29.04.2016, 21:52 | 18 |
Может быть я невнимательно читал тему, но этот момент не увидел. Честно говоря как верно сделать в вашем случае не знаю. Никогда не пробовал.
0
|
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
|
|
29.04.2016, 22:01 | 19 |
smwed, вы можете данные предоставить или просто какую страницу прогружать?
давайте я попробую через сокеты сделать. какой API ?
0
|
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
|
|
29.04.2016, 22:05 [ТС] | 20 |
А в onCreate можно отменить создание и вернуться на вызвавший код?
Это я к тому, что может в Main открывать активити с логином/паролем,а в ней при открытии делать авторизацию если есть сохраненные логин/пароль. И в случае успешной авторизации даже не показывать лайоут, а сразу закрывать ? Добавлено через 2 минуты SergioO, спасибо, конечно, но не вижу смысла, так как в дальнейшем приложение должно активно работать с сервером - получать с него разные данные в xml, а реализацию этого я планирую на HttpURLConnection построить.. Добавлено через 44 секунды Просто логика построение приложения на андроиде (все эти активити и их onCreate, onStop и т.д.) для меня нова... изучаю потихоньку..
0
|
29.04.2016, 22:05 | |
29.04.2016, 22:05 | |
Помогаю со студенческими работами здесь
20
Нужен совет по выбору БД (или нечто похожего) для приложения Нужен совет по ограничению действий пользователя Управление Рабочей областью пользователя. Нужен совет. Структура приложения(нужен совет) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |