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

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

Войти
Регистрация
Восстановить пароль
 
pixel
17 / 10 / 1
Регистрация: 19.05.2009
Сообщений: 1,532
#1

На смарт получить данные с сервера - Android

08.12.2015, 22:06. Просмотров 342. Ответов 17
Метки нет (Все метки)

Приветствую.
Хочу написать прогу для личного пользования. На сервере есть БД. В ней данные, которые нужно передать на смарт. Я не могу понять как лучше сделать - передать данные для сохранения на смарте, либо каждый раз, когда нужно их увидеть, получать (отображать) на смарте? Пока не касался этого. Подскажите, плиз.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2015, 22:06     На смарт получить данные с сервера
Посмотрите здесь:

Android Получить данные о ошибке
Android клиент-серверное приложение. Не могу получить данные с сервера Android
Android Получить список файлов с HTTP-сервера
Клиент на Android не получает данные с сервера Android
Android Как получить данные с гироскопа с телефона?
Получить данные по конкретному чату Android
Как извлечь данные из сервера Parse, чтобы эти данные были видны всем? Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
10.12.2015, 16:35     На смарт получить данные с сервера #2
http://dajver.blogspot.com/2013/02/json.html, сделайте просто как в статье, без сохранений и лишней фигни. Если конечно не надо работать офлайн с данными.
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
10.12.2015, 16:58     На смарт получить данные с сервера #3
хорошая тема для проф-роста. практически стандартный путь.

если опыта вообще нет: делайте запрос с сервера по-необходимости. нужны данные - спросил сервер.

второй этап роста: взять все данные и залить в локальную базу. если что-то надо менять на сервере - поменять и тут и там. при запуске программы - забирать все с сервака.

третий этап: брать только часть данных, которые реально нужны данному юзеру. работать исключительно локально (off-line), и решить проблему синхронизации (когда, как).
pixel
17 / 10 / 1
Регистрация: 19.05.2009
Сообщений: 1,532
10.12.2015, 17:15  [ТС]     На смарт получить данные с сервера #4
А вот еще вопрос, например, данные передаются в JSON. Но строк может быть много (не может быть, а будет). Как лучше эти данные отображать? Т.е. запрашивать частями с сервера или получить кучу данных и порциями выводить?
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
10.12.2015, 17:17     На смарт получить данные с сервера #5
Лучше сделать постраничный вывод. В запросе на сервер указываете количество новостей и отступ на какой новости показать, и передаете постоянно их на сервер, обновляя список.
pixel
17 / 10 / 1
Регистрация: 19.05.2009
Сообщений: 1,532
10.12.2015, 17:27  [ТС]     На смарт получить данные с сервера #6
так, т.е. я отправляю запрос на сервер на выборку 10 записей. принимаю их, отображаю и читаю. Далее делаю второй запрос еще на 10 записей. Вопрос 1. Предыдущие данные тупо удаляются? Вопрос 2. Если да, то будет ли это удобно, если нужно будет вернуться к этим данным? Заново запрашивать.
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
10.12.2015, 17:30     На смарт получить данные с сервера #7
Есть такая крутая штука в андроиде, называется пагинация, вы в адаптер добавляете данные, а не стираете их перезаписываая. То есть, вы создаете адаптер, загоняете туда данные, дальше выполняете запрос еще раз. и в колбеке делаете adapter.addItem(item);. item - распарсеная модель того что пришло с сервера.

Советую сперва сделать хотя бы просто без пагинации что бы понять как работает, а дальше если разберетесь, пишите сюда я помогу сделать дальше.
pixel
17 / 10 / 1
Регистрация: 19.05.2009
Сообщений: 1,532
10.12.2015, 23:31  [ТС]     На смарт получить данные с сервера #8
Цитата Сообщение от dajver Посмотреть сообщение
http://dajver.blogspot.com/2013/02/json.html, сделайте просто как в статье, без сохранений и лишней фигни. Если конечно не надо работать офлайн с данными.
Сделал. Работает. Но сразу куча вопросов. Например, если ввести некорректную пару логин/пароль - данных естественно нет, но 1. появляется пустое активити и 2. в логах "E/log_tag﹕ Error parsing data org.json.JSONException: End of input at character 1 of" что понятно, т.к. данные не пришли и парсить нечего. Как сделать такие проверки:
1. Проверить в самом начале, при клике на "Залогиниться" наличие инета и в случае отсутствия выдать сообщение "Инета нет" и прервать работу программы, т.к. смысла в попытка стучаться в закрытую дверь нет никакого.
2. При наличии инета, проверить доступность сервера (и файла, к которому коннектимся) и в случае отсутствия доступа опять же вывести сообщение об отсутствии доступа (ну мало ли сервер в ауте) и опять же остановить выполнение программы.
3. Если и 1 и 2 выполнены, проверить правильность пары логин/пароль и в случае несовпадения - вывести сообщение "Неверный логин либо пароль" и остановить выполнение программы.
вообще, штука интересная этот андроид, но пока что в голове одни вопросы. С дельфи попроще как то.
И еще смущает вот это:
Java
1
2
3
4
5
6
7
8
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                //передаем параметры из наших текстбоксов
                //лоигн
                nameValuePairs.add(new BasicNameValuePair("login", login.getText().toString()));
                //пароль
                nameValuePairs.add(new BasicNameValuePair("pass", pass.getText().toString()));
                //собераем их вместе и посылаем на сервер
                postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
А можно как то одной строкой передавать логин пароль (если без полей ввода). И в случае если использовать поля ввода логин пароль, каким образом реализуется сохранение данных для последующих подключений (не в этом примере, а вообще, где ставится галка "сохранить пароль" - куда эти данные сохраняются?)
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
11.12.2015, 12:54     На смарт получить данные с сервера #9
Цитата Сообщение от pixel Посмотреть сообщение
1. Проверить в самом начале, при клике на "Залогиниться" наличие инета и в случае отсутствия выдать сообщение "Инета нет" и прервать работу программы, т.к. смысла в попытка стучаться в закрытую дверь нет никакого.
Дальше советую все гуглить, все ответы есть на stack overflow. Вот один из них как проверить интернет соединение.
Java
1
2
3
4
5
6
public boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager)getActivity().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager
            .getActiveNetworkInfo();
    return activeNetworkInfo != null;
}
проверяем наличие
Java
1
2
3
4
5
if(isNetworkAvailable()) {
//творим добро
} else {
//говорим что нет инета
}
Премишен в манифесте
XML
1
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Цитата Сообщение от pixel Посмотреть сообщение
2. При наличии инета, проверить доступность сервера (и файла, к которому коннектимся) и в случае отсутствия доступа опять же вывести сообщение об отсутствии доступа (ну мало ли сервер в ауте) и опять же остановить выполнение программы.
Тут уже должны быть настройки сервера, я не серверный программист по этому я таких деталей не знаю, но советую почитать как настроить сервер на отображение разных ошибок, типа 400, 401, 403, 404, 501 и так далее.

Когда настроите дальше просто если приходит одна из этих ошибок выводите сообщение что сервер выключен или еще что то.

Цитата Сообщение от pixel Посмотреть сообщение
3. Если и 1 и 2 выполнены, проверить правильность пары логин/пароль и в случае несовпадения - вывести сообщение "Неверный логин либо пароль" и остановить выполнение программы.
Это должно проверять на сервере, и отдавать ответ "ОК" например, и если этот ОК приходит к вам в приложение тогда делаете дальше переход на другую активити или куда то там.

Цитата Сообщение от pixel Посмотреть сообщение
И еще смущает вот это:
Нет, тут одной строкой никак...
Вообще, советую использовать библиотеки для создания реквестов, их очень много. Одна из них http://loopj.com/android-async-http/, для новичков в самый раз. А вообще надо использовать либу retrofit, но для начала не советую ее использовать, сильно мудреная для человека недавно познакомившегося с андроидом и джавой вообще.

Цитата Сообщение от pixel Посмотреть сообщение
И в случае если использовать поля ввода логин пароль, каким образом реализуется сохранение данных для последующих подключений (не в этом примере, а вообще, где ставится галка "сохранить пароль" - куда эти данные сохраняются?)
Для таких штук в апи делают поле, называется token. это хеш 32 символьный, который хранится на сервере и привязан к конкретному пользователю. ТО есть если вася пупкин зашел в приложение, с ответом ОК, ему должно возвращаться еще поле token вида 3edfg5tyh4edft67jhgbgt78pl3bf556. Вы его сохраняете, кстати по поводу сохранения, его мы делаем почти всегда в SharedPreferences, примерно вот так
Java
1
2
3
4
 PreferenceManager.getDefaultSharedPreferences(context)
                .edit()
                .putString("token", token) //token - который приходит с сервера
                .commit();
а если хотим получить его то делаем вот так
Java
1
2
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        preferences.getString("token", "");//ваш токен
Так, я отвлекся, в общем. Этот токен нужно передавать на сервер для получения данных по кокнретному пользователю. То есть если вы хотите получить например все новости которые когда либо этот пользователь публиковал, вы отправляете запрос на адрес, и передаете токен для выборки из базы, что бы получить данные только по этому пользователю, и так во всем, все действия...

Надеюсь понятно объяснил
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
11.12.2015, 13:57     На смарт получить данные с сервера #10
не надо сохранять токен. ваще никогда.
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
11.12.2015, 14:01     На смарт получить данные с сервера #11
не надо сохранять токен. ваще никогда.
Всю жизнь так делал... И все было правильно. Как иначе тогда нам его слать на север?
pixel
17 / 10 / 1
Регистрация: 19.05.2009
Сообщений: 1,532
11.12.2015, 15:56  [ТС]     На смарт получить данные с сервера #12
Цитата Сообщение от dajver Посмотреть сообщение
Цитата Сообщение от pixel Посмотреть сообщение
2. При наличии инета, проверить доступность сервера (и файла, к которому коннектимся) и в случае отсутствия доступа опять же вывести сообщение об отсутствии доступа (ну мало ли сервер в ауте) и опять же остановить выполнение программы.
Тут уже должны быть настройки сервера, я не серверный программист по этому я таких деталей не знаю, но советую почитать как настроить сервер на отображение разных ошибок, типа 400, 401, 403, 404, 501 и так далее.
Когда настроите дальше просто если приходит одна из этих ошибок выводите сообщение что сервер выключен или еще что то.
как то не логично - если сервер в ауте - какой смысл с настроек сервера, если в итоге никакой ошибки из настроенных не придет - он же в ауте.
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
11.12.2015, 17:11     На смарт получить данные с сервера #13
2dajver: поправка - не надо сохранять во внешнее хранилище (SharedPreferences). используйте в текущей сессии в приложении как угодно. храните в памяти, таскайте как параметр между вызовами, но не выкладывайте никуда. это итак узкое место в безопасности.
Паблито
2008 / 1750 / 543
Регистрация: 12.05.2014
Сообщений: 6,192
Завершенные тесты: 1
11.12.2015, 17:20     На смарт получить данные с сервера #14
Цитата Сообщение от bastrakov Посмотреть сообщение
не надо сохранять токен. ваще никогда.
у меня наводящий вопрос, а где обитает например токен который получили от ВКонтакта?
приложение закрыли, через неделю открыли, а мы все еще зачекинены
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
11.12.2015, 17:27     На смарт получить данные с сервера #15
Цитата Сообщение от pixel Посмотреть сообщение
как то не логично - если сервер в ауте - какой смысл с настроек сервера, если в итоге никакой ошибки из настроенных не придет - он же в ауте.
Да согласен, тупанул, тут нужно отлавливать таймаут запроса.

Если рассматривать пример который дал я в первом своем ответе то есть такая штука
Java
1
2
3
4
HttpParams params= new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 3000);// 3000 время сколько ждать, 3 секунды
HttpConnectionParams.setSoTimeout(params, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(params);
Что собственно дает знать если таймаут ответа допустим дольше 5 секунд значит сервер не работает. Дальше не делается реквест.
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
11.12.2015, 18:06     На смарт получить данные с сервера #16
Паблито (не спать!) 666... вот не зря сегодня такой номер. :-) плохому научит! :-)
я знаю где он хранится. я говорю, что не надо так делать.
у вас безопасника нет под боком? поговорите с ним.
Паблито
2008 / 1750 / 543
Регистрация: 12.05.2014
Сообщений: 6,192
Завершенные тесты: 1
11.12.2015, 18:19     На смарт получить данные с сервера #17
я админ и сам могу рассказать безопаснику почем в Одессе рубероид
все хранят токен в SharedPreferences, иначе где его хранить?
если устройство не рутованое то никто к нему не доберется, а если предполагать что рутованое и человек задастся целью то ничего не спасет

Добавлено через 6 минут

Не по теме:

ps: в онлайне замечен YuraAAA, надеюсь от выскажет свое веское мнение я могу ошибаться, чсв часто подводит

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2015, 23:20     На смарт получить данные с сервера
Еще ссылки по теме:

Android Получить данные в string
Получить данные из mySLQ с удаленного сервера Android
Android Как заставить сокет клиента слушать данные с сервера постоянно?
Android Получить список файлов сервера указав путь
Android Получить персональные данные из WhatsApp

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

Или воспользуйтесь поиском по форуму:
pixel
17 / 10 / 1
Регистрация: 19.05.2009
Сообщений: 1,532
11.12.2015, 23:20  [ТС]     На смарт получить данные с сервера #18
Цитата Сообщение от Паблито Посмотреть сообщение
я админ и сам могу рассказать безопаснику почем в Одессе рубероид

Не по теме:

блин, радует меня такой подход к делу :-)

Yandex
Объявления
11.12.2015, 23:20     На смарт получить данные с сервера
Ответ Создать тему
Опции темы

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