1

我正在为我公司为内部使用而开发的应用程序编写一个自动更新程序。应用程序存储在外部 Web 服务器上。我遇到的问题是每次下载尝试都会检索不再在服务器上的旧数据。如果我使用手机的浏览器(或我的 PC 浏览器),新数据会正确下载。我正在下载 APK 和 JSON 文件。

我尝试了两种不同的方法(都在 SO 上找到),都在 AsyncTask doInBackground 中:

HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
request.addHeader("deviceId", "xxxxx");
String result = "";
ResponseHandler<String> handler = new BasicResponseHandler();
result = httpclient.execute(request, handler);
httpclient.getConnectionManager().shutdown();
return result;

和:

URL url = new URL(sUrl[0]);
URLConnection connection = url.openConnection();
connection.setDefaultUseCaches(false);
connection.connect();

// this will be useful so that you can show a typical 0-100% progress bar
int fileLength = connection.getContentLength();

//download the file
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(downloadDir + "/" + name);

byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
   total += count;
   // publishing the progress....
   publishProgress((int) (total * 100 / fileLength));
   output.write(data, 0, count);
}

output.flush();
output.close();
input.close();

我在两部手机上都试过了。第一次下载没问题,然后手机重新下载第一个下载的版本。我怀疑缓存是否在服务器上,因为它只发生在我的应用程序内部。另外,我肯定不会阅读旧文件;我已经检查过并尝试下载到字符串中。让我感到困惑的是,我在不同的应用程序中使用了上述第一种方法,并且效果很好。会不会是缓存问题?如果是这样,我如何强制它清除旧数据?重命名服务器上的文件可以解决这个问题,但是有些文件不能更改名称,而且重命名文件是一个相当丑陋的解决方案。

4

0 回答 0