0

我的 android 应用程序上有一个指向托管文件的服务器的链接。我希望我的应用程序在后台从服务器下载此文件,以便用户可以保持应用程序的焦点并继续做他想做的事情。

我假设 AsyncTask 可用于在后台执行此操作。应用程序中的链接指向一个 php 页面,该页面具有以下代码 -

header("Content-type: application/xls");
header("Content-Disposition: attachment; filename=\myFile.xls\"");
readfile("myFile.xls"); 

据我了解, readfile() 将从服务器获取数据,然后将其写入其缓冲区。AsyncTask 将从这个缓冲区中读取数据并将其存储到手机中指定的位置。

我的问题 - 1. 请让我知道我的方法是否正确(我在上面已经描述过) 2. 我假设 header("Content-Disposition: ..) 将导致打开/保存对话框(如普通桌面浏览器对话框的情况)。android应用程序调用链接时也会显示类似的对话框吗?如果是,有没有办法不显示这个对话框而只下载,这样用户就不需要了麻烦文件在他的手机中存储在哪里?

谢谢!

4

1 回答 1

1

异步任务是让您在后台执行此操作。PHP 页面返回 xml 文件的内容。HttpGet用于获取内容,然后将它们保存到您选择的位置。

HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet ("http://urltopage.com/page");

HttpResponse response = httpclient.execute(httpget);
sb = new StringBuffer("");
in = new BufferedReader(new InputStreamReader(response
                        .getEntity().getContent()));

String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
    sb.append(line + NL);

}
in.close();

然后,您现在可以对文本格式的内容做任何您想做的事情。stringbuilder 不是必须的,但这样你会得到一个干净的字符串。我认为您可以直接将其写入文件而不是构建字符串。

如果要将其直接放入文件中:

FileOutputStream fos = new FileOutputStream(newFile("\path to file"));

byte[] buff = new byte[4096];
int len; 
while((len = in.read(buff)) > 0) {
      fos.write(buff, 0, len);
}


fos.close()
于 2013-02-16T19:35:03.100 回答