1

会社が内部使用のために開発したアプリケーションの自動アップデーターを作成しています。アプリケーションは、外部の Web サーバーに保存されます。私が抱えている問題は、ダウンロードを試行するたびに、サーバー上にない古いデータが取得されることです。電話のブラウザ (または PC のブラウザ) を使用すると、新しいデータが正しくダウンロードされます。APK と JSON ファイルをダウンロードしています。

AsyncTask doInBackground 内で、2 つの異なる方法を試しました (どちらも SO にあります)。

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();

2台の電話でこれを試しました。最初のダウンロードは問題なく、その後、電話は最初にダウンロードしたバージョンを再ダウンロードします。アプリ内でのみ発生するため、キャッシュがサーバー上にあるとは思えません。また、私は間違いなく古いファイルを読んでいません。私はそれを確認し、文字列にダウンロードしようとしました。私を混乱させているのは、上記の最初の方法を別のアプリで使用したことがあり、それが完全に機能することです。キャッシングの問題でしょうか?もしそうなら、古いデータを強制的に消去するにはどうすればよいですか? サーバー上のファイルの名前を変更すると、この問題は解決しますが、名前を変更できないファイルがいくつかあります。さらに、ファイルの名前を変更するのはかなり厄介な解決策です。

4

0 に答える 0