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

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

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

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

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

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

Получить данные из mySLQ с удаленного сервера - Программирование Android
У меня на сайте есть база данных, подскажите как с ней работать? Можно пример? Нигде не нашел

Android клиент-серверное приложение. Не могу получить данные с сервера - Программирование Android
Добрый день. Пытаюсь сделать клиент-серверное приложение: клиент Android, сервер - Windows, программа на Java. Проблема в том, что с...

Как извлечь данные из сервера Parse, чтобы эти данные были видны всем? - Программирование Android
У меня есть активити, где есть строка, куда вводишь данные и они отправляются на сервер, и они сохраняются именно в этом активити и их вижу...

Клиент на Android не получает данные с сервера - Программирование Android
Сервер на компе, написан на .Net, клиент на Android, ставится на устройство. Находясь в одной сети клиент подключается к серверу на .Net,...

Получить список файлов с HTTP-сервера - Программирование Android
Интересует получение списка файлов без вспомогательных серверных скриптов php и пр. Я подозреваю, что скорее всего это невозможно из...

Получить список файлов сервера указав путь - Программирование Android
Есть сервер на java рабочий. Принимает запросы от клиента и выводит список txt файлов прописанного в путе диска, затем по введенному...

17
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
10.12.2015, 16:35 #2
http://dajver.blogspot.com/2013/02/json.html, сделайте просто как в статье, без сохранений и лишней фигни. Если конечно не надо работать офлайн с данными.
1
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
10.12.2015, 16:58 #3
хорошая тема для проф-роста. практически стандартный путь.

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

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

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

Советую сперва сделать хотя бы просто без пагинации что бы понять как работает, а дальше если разберетесь, пишите сюда я помогу сделать дальше.
1
pixel
17 / 10 / 1
Регистрация: 19.05.2009
Сообщений: 1,596
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));
А можно как то одной строкой передавать логин пароль (если без полей ввода). И в случае если использовать поля ввода логин пароль, каким образом реализуется сохранение данных для последующих подключений (не в этом примере, а вообще, где ставится галка "сохранить пароль" - куда эти данные сохраняются?)
0
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
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", "");//ваш токен
Так, я отвлекся, в общем. Этот токен нужно передавать на сервер для получения данных по кокнретному пользователю. То есть если вы хотите получить например все новости которые когда либо этот пользователь публиковал, вы отправляете запрос на адрес, и передаете токен для выборки из базы, что бы получить данные только по этому пользователю, и так во всем, все действия...

Надеюсь понятно объяснил
0
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
11.12.2015, 13:57 #10
не надо сохранять токен. ваще никогда.
0
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
11.12.2015, 14:01 #11
не надо сохранять токен. ваще никогда.
Всю жизнь так делал... И все было правильно. Как иначе тогда нам его слать на север?
0
pixel
17 / 10 / 1
Регистрация: 19.05.2009
Сообщений: 1,596
11.12.2015, 15:56  [ТС] #12
Цитата Сообщение от dajver Посмотреть сообщение
Цитата Сообщение от pixel Посмотреть сообщение
2. При наличии инета, проверить доступность сервера (и файла, к которому коннектимся) и в случае отсутствия доступа опять же вывести сообщение об отсутствии доступа (ну мало ли сервер в ауте) и опять же остановить выполнение программы.
Тут уже должны быть настройки сервера, я не серверный программист по этому я таких деталей не знаю, но советую почитать как настроить сервер на отображение разных ошибок, типа 400, 401, 403, 404, 501 и так далее.
Когда настроите дальше просто если приходит одна из этих ошибок выводите сообщение что сервер выключен или еще что то.
как то не логично - если сервер в ауте - какой смысл с настроек сервера, если в итоге никакой ошибки из настроенных не придет - он же в ауте.
1
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
11.12.2015, 17:11 #13
2dajver: поправка - не надо сохранять во внешнее хранилище (SharedPreferences). используйте в текущей сессии в приложении как угодно. храните в памяти, таскайте как параметр между вызовами, но не выкладывайте никуда. это итак узкое место в безопасности.
0
Pablito
2505 / 1989 / 619
Регистрация: 12.05.2014
Сообщений: 6,949
Завершенные тесты: 1
11.12.2015, 17:20 #14
Цитата Сообщение от bastrakov Посмотреть сообщение
не надо сохранять токен. ваще никогда.
у меня наводящий вопрос, а где обитает например токен который получили от ВКонтакта?
приложение закрыли, через неделю открыли, а мы все еще зачекинены
1
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
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 секунд значит сервер не работает. Дальше не делается реквест.
1
11.12.2015, 17:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2015, 17:27
Привет! Вот еще темы с ответами:

Как заставить сокет клиента слушать данные с сервера постоянно? - Программирование Android
есть такой клиент import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; ...

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

Получить данные в string - Программирование Android
Добрый ночи такая проблема возникает. Вот код для получение страницы public class FirstFragment extends Fragment { ...

Получить персональные данные из WhatsApp - Программирование Android
Всем доброго времени суток ! Ребята задача такая: нужен код для приложения. Требуется получить персональные данные из WhatsApp (Никнэйм,...


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

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

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