我希望你能解决我的问题。我必须实例化一个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();
连接。
当我正在迭代时,连接已经开启且能够接收传入数据吗?
我为我的英语道歉。非常感谢
弗朗西斯
答案 0 :(得分:0)
来自官方的android文档
此课程的使用遵循以下模式:
通过调用URL.openConnection()和获取新的HttpURLConnection 将结果转换为HttpURLConnection。
准备请求。该 请求的主要属性是其URI。请求标头也可以 包括凭据,首选内容类型等元数据 会话cookie。
可选择上传请求正文。实例必须是 如果它们包含请求主体,则使用setDoOutput(true)进行配置。 通过写入getOutputStream()返回的流来传输数据。
阅读回复。响应标头通常包含元数据,例如 响应主体的内容类型和长度,修改日期和 会话cookie。可以从流中读取响应主体 由getInputStream()返回。如果响应没有正文,那么该方法 返回一个空流。
- 醇>
断开连接。一旦响应机构出现了 读取,应该通过调用disconnect()来关闭HttpURLConnection。 断开连接释放连接所拥有的资源,以便它们可以 关闭或重复使用。
从这句话中可以看出,如果您需要向主机发送一些数据,您只需要调用setDoOutput(true)
并使用连接的OutputStream
将数据发送到主机。在这种情况下,您在调用setDoOutput(true)
后使用“POST”请求方法。如果您不需要发送数据,只是为了连接到主机并检索数据,您也不需要调用setRequestMethod("GET")
,因为它是默认的请求方法。
当您连接到主机时,只需使用InputStream
从中获取数据。