Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序似乎缓存http数据_Android - Fatal编程技术网

Android 应用程序似乎缓存http数据

Android 应用程序似乎缓存http数据,android,Android,我正在为我的公司为内部使用而开发的应用程序编写一个自动更新程序。应用程序存储在外部web服务器上。我遇到的问题是,每次下载尝试都会检索服务器上不再存在的旧数据。如果我使用手机浏览器(或PC浏览器),新数据将正确下载。我正在下载APK和JSON文件 我在AsyncTask doInBackground中尝试了两种不同的方法(都是这样发现的): HttpClient httpclient = new DefaultHttpClient(); HttpGet request = new HttpGet

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

我在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;

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

您是否进行了一些日志打印以显示正在下载的文件的名称?你确定新版本有不同的名称,或者你没有正确替换文件?@RodBurns是的,我已经记录了下载的名称,并仔细检查了它们。名字是正确的。我还使用手机内置的文件浏览器进行了一次完整的非编程目录删除,然后让我的程序重新创建文件夹并下载到其中。然而,没有任何变化。文件夹中显示了旧版本。
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();