我尝试在我的应用完成后将缓存数据发布到服务器。
如果我得到肯定的回复(200,HTTP_OK
),我将删除缓存的数据。
如果状态代码不同,或者在请求期间可能发生任何异常(MalformedURLException
,UnknownHostException
,IOException
甚至Exception
),我会保留缓存数据。
如果应用程序恢复并且缓存的数据仍然存在,我将尝试再次发送它。
在极少数情况下,我在服务器上发现重复数据,表明缓存数据已发送两次。我想知道这是怎么可能的。
这是使用Thread(Runnable)
实现的。
Runnable使用HttpURLConnection
发送帖子,如下所示(简化):
private void run() {
try {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
OutputStream out = conn.getOutputStream();
out.write(myCacheDataString);
out.flush();
out.close();
int httpStatusCode = conn.getResponseCode();
conn.disconnect();
if (httpStatusCode == 200) {
// Okay! delete cache
} else {
// Not okay. Keep Cache
}
} catch (MalformedURLException e) {
// Not okay. Keep Cache
} catch (UnknownHostException e) {
// Not okay. Keep Cache
} catch (IOException e1) {
// Not okay. Keep Cache
} catch (Exception e) {
// Not okay. Keep Cache
}
}
您必须相信我的缓存策略正在运行,并且服务器正在响应我的POST。
我的客户是否以任何可能的方式"缺少"来自服务器的200响应?
[编辑]:minSdkVersion为10