Android保持连接活动以从服务器接收持续数据更新

时间:2012-01-27 12:25:49

标签: android httprequest

我希望你能解决我的问题。我必须实例化一个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()函数为我提供了必须调用的完整网址。 然后我通过httpConnection.connect();连接。

当我正在迭代时,连接已经开启且能够接收传入数据吗?

我为我的英语道歉。非常感谢

弗朗西斯

1 个答案:

答案 0 :(得分:0)

来自官方的android文档

  

此课程的使用遵循以下模式:

     
      
  1. 通过调用URL.openConnection()和获取新的HttpURLConnection   将结果转换为HttpURLConnection。

  2.   
  3. 准备请求。该   请求的主要属性是其URI。请求标头也可以   包括凭据,首选内容类型等元数据   会话cookie。

  4.   
  5. 可选择上传请求正文。实例必须是   如果它们包含请求主体,则使用setDoOutput(true)进行配置。   通过写入getOutputStream()返回的流来传输数据。

  6.   
  7. 阅读回复。响应标头通常包含元数据,例如   响应主体的内容类型和长度,修改日期和   会话cookie。可以从流中读取响应主体   由getInputStream()返回。如果响应没有正文,那么该方法   返回一个空流。

  8.   
  9. 断开连接。一旦响应机构出现了   读取,应该通过调用disconnect()来关闭HttpURLConnection。   断开连接释放连接所拥有的资源,以便它们可以   关闭或重复使用。

  10.   

从这句话中可以看出,如果您需要向主机发送一些数据,您只需要调用setDoOutput(true)并使用连接的OutputStream将数据发送到主机。在这种情况下,您在调用setDoOutput(true)后使用“POST”请求方法。如果您不需要发送数据,只是为了连接到主机并检索数据,您也不需要调用setRequestMethod("GET"),因为它是默认的请求方法。

当您连接到主机时,只需使用InputStream从中获取数据。