Получение данных по сети в разработке под Android

408
08 января 2017, 17:03

Всем доброго утра! Проблема заключается в выборе способа: мне требуется забирать некоторый JSON, который отдается на API сервера (Node.js по некоторому запросу вернет JSON по SQL-запросу к бд). Наверное, это всё, что требуется.

Во-первых, достаточно ли, чтобы сервер только принимал запрос и в ответ возвращал информацию по запросу? Как это с точки зрения безопасности?

И каким образом на андроиде отправляют такой запрос и как дождаться ответа в виде того что мне требуется?

Answer 1

Достаточно или нет - зависит от того, что сервис отдаёт. Если это публичные данные, нет смысла их закрывать. Если приватные, можно использовать секретный ключ, как это делает большинство web-сервисов.

Отправляется теми же способами, как и в любой другой java-программе. И как и в любой другой java-программе (исключая, может быть, консольные утилиты) стоит делать это в фоновом потоке. В Android для этого есть AsyncTask и Handler. Выбор одного из них зависит от особенностей вашей программы. Пример использования AsyncTask:

private class GetJsonTask extends AsyncTask<URL, String, JSONObject> {
    @Override
    protected JSONObject doInBackground(URL... urls) { //Фоновый поток
        HttpURLConnection connection = (HttpURLConnection)urls[0].openConnection();
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            InputStream in = connection.getInputStream();
            if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
                throw new IOException(connection.getResponseMessage());
            }
            int bytesRead = 0;
            byte[] buffer = new byte[1024];
            while ((bytesRead = in.read(buffer)) > 0) {
                out.write(buffer, 0, bytesRead);
            }
            out.close();
            return new JSONObject(out.toString());
        } finally {
            connection.disconnect();
        }
    }
    @Override
    protected void onPostExecute(JSONObject json) { //Callback в главном потоке
        //Делайте с вашим json всё, что нужно.
    }
}
new GetJsonTask().execute(new URL('http://myservice.ru/somedata.json'));
READ ALSO
Рекурсивный запрос по протоколу [требует правки]

Рекурсивный запрос по протоколу [требует правки]

Нужно создать рекурсивный запрос по UDP/TCP протоколуКто может подсказать, как это правильно реализовать?

327
Apache poi и поля в документе Word

Apache poi и поля в документе Word

Добрый деньПодскажите пожалуйста, есть шаблон документа Word, в котором имеется некоторый набор полей, в которые необходимо выгрузить соответствующие...

621
Почему get(Calendar.MONTH -1) возвращает год?

Почему get(Calendar.MONTH -1) возвращает год?

В январе nowMonth - 0, хорошоПочему nowMonth2 - 2017? Т

321
Как получить список контактов в Qt на Android

Как получить список контактов в Qt на Android

Я написал простую функцию на java в Android Studio, которая склеивает список контактов в строкуДанные хранятся в xml

968