Android поддерживает соединение, чтобы получать постоянные обновления данных с сервера - PullRequest
0 голосов
/ 27 января 2012

Я надеюсь, что вы можете помочь мне с моей проблемой. Я должен создать экземпляр http-соединения и выполнить вызов get для сервера. После этого звонка я должен периодически проверять, отправил ли мне сервер некоторые данные (соединение не должно быть закрыто после получения первых данных). Если это произойдет, тогда мне придется проанализировать эти данные, передать их в действие и снова ждать.

Моя проблема - понять, правильно ли я делаю эту вещь. Вот мой код

try {
        URL url = getUrl();
        URLConnection urlConn = url.openConnection();
        HttpURLConnection httpConnection = (HttpURLConnection) urlConn;
        httpConnection.setRequestMethod("GET");
        httpConnection.connect();

        while(true) {
            sleep(5000);
            int responseCode = httpConnection.getResponseCode();

            if(responseCode == HttpURLConnection.HTTP_OK) {
                InputStream inputStream = httpConnection.getInputStream();
                String response = null;

                if(inputStream.available() > 0) {
                    long length = inputStream.available();
                    byte[] bytes = new byte[(int) length];
                    inputStream.read(bytes);
                    response = new String(bytes, "UTF-8");
                }
            }
        }                   
    } catch(Exception e) {
        e.printStackTrace();
    }

getUrl() функция дает мне полный URL-адрес, который мне нужно вызвать. Затем я подключаюсь через httpConnection.connect();.

во время итерации соединение уже открыто и способно принимать входящие данные?

Я прошу прощения за мой английский. Большое спасибо

Francesco

1 Ответ

0 голосов
/ 27 января 2012

из официальной документации android

Использование этого класса следует шаблону:

  1. Получите новый HttpURLConnection, вызвав URL.openConnection () и приведение результата к HttpURLConnection.

  2. Подготовить запрос. Основным свойством запроса является его URI. Заголовки запроса могут также включать метаданные, такие как учетные данные, предпочтительные типы контента и сеансовые куки.

  3. При желании загрузить тело запроса. Экземпляры должны быть настраивается с помощью setDoOutput (true), если они содержат тело запроса. Передайте данные, записав в поток, возвращаемый getOutputStream ().

  4. Прочитать ответ. Заголовки ответа обычно включают метаданные, такие как тип и длина содержимого тела ответа, измененные даты и сеансовые куки. Тело ответа может быть прочитано из потока возвращается методом getInputStream (). Если ответ не имеет тела, этот метод возвращает пустой поток

  5. Disconnect. После того, как тело ответа было прочитайте, HttpURLConnection должен быть закрыт путем вызова disnect (). Отключение освобождает ресурсы, удерживаемые соединением, чтобы они могли быть закрыты или использованы повторно.

Как видно из этой цитаты, если вам нужно отправить некоторые данные на хост, вам просто нужно позвонить setDoOutput(true) и использовать OutputStream вашего соединения для отправки данных на хост. В этом случае вы используете метод запроса «POST» после того, как вы вызвали setDoOutput(true). Если вам не нужно отправлять данные, а просто подключиться к хосту и получить данные, вам также не нужно вызывать setRequestMethod("GET"), потому что это метод запроса по умолчанию.

При подключении к хосту просто используйте InputStream для получения данных с него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...