pixel
19 / 12 / 4
Регистрация: 19.05.2009
Сообщений: 1,704
|
|
1 | |
На смарт получить данные с сервера08.12.2015, 22:06. Просмотров 482. Ответов 17
Метки нет Все метки)
(
Приветствую.
Хочу написать прогу для личного пользования. На сервере есть БД. В ней данные, которые нужно передать на смарт. Я не могу понять как лучше сделать - передать данные для сохранения на смарте, либо каждый раз, когда нужно их увидеть, получать (отображать) на смарте? Пока не касался этого. Подскажите, плиз.
0
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
08.12.2015, 22:06 |
Ответы с готовыми решениями:
17
Получить данные из mySLQ с удаленного сервера Android клиент-серверное приложение. Не могу получить данные с сервера Как извлечь данные из сервера Parse, чтобы эти данные были видны всем? Клиент на Android не получает данные с сервера
|
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
|
|
10.12.2015, 16:35 | 2 |
http://dajver.blogspot.com/2013/02/json.html, сделайте просто как в статье, без сохранений и лишней фигни. Если конечно не надо работать офлайн с данными.
1
|
bastrakov
|
|
10.12.2015, 16:58 | 3 |
хорошая тема для проф-роста. практически стандартный путь.
если опыта вообще нет: делайте запрос с сервера по-необходимости. нужны данные - спросил сервер. второй этап роста: взять все данные и залить в локальную базу. если что-то надо менять на сервере - поменять и тут и там. при запуске программы - забирать все с сервака. третий этап: брать только часть данных, которые реально нужны данному юзеру. работать исключительно локально (off-line), и решить проблему синхронизации (когда, как).
1
|
pixel
19 / 12 / 4
Регистрация: 19.05.2009
Сообщений: 1,704
|
|
10.12.2015, 17:15 [ТС] | 4 |
А вот еще вопрос, например, данные передаются в JSON. Но строк может быть много (не может быть, а будет). Как лучше эти данные отображать? Т.е. запрашивать частями с сервера или получить кучу данных и порциями выводить?
0
|
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
|
|
10.12.2015, 17:17 | 5 |
Лучше сделать постраничный вывод. В запросе на сервер указываете количество новостей и отступ на какой новости показать, и передаете постоянно их на сервер, обновляя список.
0
|
pixel
19 / 12 / 4
Регистрация: 19.05.2009
Сообщений: 1,704
|
|
10.12.2015, 17:27 [ТС] | 6 |
так, т.е. я отправляю запрос на сервер на выборку 10 записей. принимаю их, отображаю и читаю. Далее делаю второй запрос еще на 10 записей. Вопрос 1. Предыдущие данные тупо удаляются? Вопрос 2. Если да, то будет ли это удобно, если нужно будет вернуться к этим данным? Заново запрашивать.
0
|
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
|
|
10.12.2015, 17:30 | 7 |
Есть такая крутая штука в андроиде, называется пагинация, вы в адаптер добавляете данные, а не стираете их перезаписываая. То есть, вы создаете адаптер, загоняете туда данные, дальше выполняете запрос еще раз. и в колбеке делаете adapter.addItem(item);. item - распарсеная модель того что пришло с сервера.
Советую сперва сделать хотя бы просто без пагинации что бы понять как работает, а дальше если разберетесь, пишите сюда я помогу сделать дальше.
1
|
pixel
19 / 12 / 4
Регистрация: 19.05.2009
Сообщений: 1,704
|
||||||
10.12.2015, 23:31 [ТС] | 8 | |||||
Сделал. Работает. Но сразу куча вопросов. Например, если ввести некорректную пару логин/пароль - данных естественно нет, но 1. появляется пустое активити и 2. в логах "E/log_tag﹕ Error parsing data org.json.JSONException: End of input at character 1 of" что понятно, т.к. данные не пришли и парсить нечего. Как сделать такие проверки:
1. Проверить в самом начале, при клике на "Залогиниться" наличие инета и в случае отсутствия выдать сообщение "Инета нет" и прервать работу программы, т.к. смысла в попытка стучаться в закрытую дверь нет никакого. 2. При наличии инета, проверить доступность сервера (и файла, к которому коннектимся) и в случае отсутствия доступа опять же вывести сообщение об отсутствии доступа (ну мало ли сервер в ауте) и опять же остановить выполнение программы. 3. Если и 1 и 2 выполнены, проверить правильность пары логин/пароль и в случае несовпадения - вывести сообщение "Неверный логин либо пароль" и остановить выполнение программы. вообще, штука интересная этот андроид, но пока что в голове одни вопросы. С дельфи попроще как то. И еще смущает вот это:
0
|
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
|
||||||||||||||||||||||||||
11.12.2015, 12:54 | 9 | |||||||||||||||||||||||||
Дальше советую все гуглить, все ответы есть на stack overflow. Вот один из них как проверить интернет соединение.
Когда настроите дальше просто если приходит одна из этих ошибок выводите сообщение что сервер выключен или еще что то. Это должно проверять на сервере, и отдавать ответ "ОК" например, и если этот ОК приходит к вам в приложение тогда делаете дальше переход на другую активити или куда то там. Нет, тут одной строкой никак... Вообще, советую использовать библиотеки для создания реквестов, их очень много. Одна из них http://loopj.com/android-async-http/, для новичков в самый раз. А вообще надо использовать либу retrofit, но для начала не советую ее использовать, сильно мудреная для человека недавно познакомившегося с андроидом и джавой вообще. Для таких штук в апи делают поле, называется token. это хеш 32 символьный, который хранится на сервере и привязан к конкретному пользователю. ТО есть если вася пупкин зашел в приложение, с ответом ОК, ему должно возвращаться еще поле token вида 3edfg5tyh4edft67jhgbgt78pl3bf556. Вы его сохраняете, кстати по поводу сохранения, его мы делаем почти всегда в SharedPreferences, примерно вот так
Надеюсь понятно объяснил
0
|
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
|
|
11.12.2015, 14:01 | 11 |
0
|
pixel
19 / 12 / 4
Регистрация: 19.05.2009
Сообщений: 1,704
|
|
11.12.2015, 15:56 [ТС] | 12 |
как то не логично - если сервер в ауте - какой смысл с настроек сервера, если в итоге никакой ошибки из настроенных не придет - он же в ауте.
1
|
bastrakov
|
|
11.12.2015, 17:11 | 13 |
2dajver: поправка - не надо сохранять во внешнее хранилище (SharedPreferences). используйте в текущей сессии в приложении как угодно. храните в памяти, таскайте как параметр между вызовами, но не выкладывайте никуда. это итак узкое место в безопасности.
0
|
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
|
||||||
11.12.2015, 17:27 | 15 | |||||
Да согласен, тупанул, тут нужно отлавливать таймаут запроса.
Если рассматривать пример который дал я в первом своем ответе то есть такая штука
1
|
Pablito
|
|
11.12.2015, 18:19 | 17 |
я админ и сам могу рассказать безопаснику почем в Одессе рубероид
все хранят токен в SharedPreferences, иначе где его хранить? если устройство не рутованое то никто к нему не доберется, а если предполагать что рутованое и человек задастся целью то ничего не спасет Добавлено через 6 минут Не по теме: ps: в онлайне замечен YuraAAA, надеюсь от выскажет свое веское мнение :) я могу ошибаться, чсв часто подводит
1
|
pixel
19 / 12 / 4
Регистрация: 19.05.2009
Сообщений: 1,704
|
|
11.12.2015, 23:20 [ТС] | 18 |
0
|
11.12.2015, 23:20 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
11.12.2015, 23:20 |
Получить список файлов сервера указав путь Как заставить сокет клиента слушать данные с сервера постоянно? Получить данные о ошибке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |