2013-02-16 13 views
0

我的android應用程序將有一個鏈接到它託管文件的服務器。我希望我的應用程序能夠在後臺從服務器下載此文件,以便用戶可以保持應用程序的專注並繼續做他想做的事情。使用AsyncTask從PHP網站下載沒有任何打開/保存對話框的文件

我認爲AsyncTask可以用於在後臺執行此操作。在應用程序的鏈接是一個PHP頁面,其中有下面的代碼 -

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

據我瞭解,在ReadFile的()將會從服務器獲取數據,然後將它寫入其緩衝區。 AsyncTask會從這個緩衝區中讀取並按照指定的方式將它存儲到手機中的位置。

我的問題 - 1.不要讓我知道如果我的做法是正確的(我已經如上所述) 2.我假設的標題(「內容處置:..)將導致打開/保存對話框(如正常桌面瀏覽器對話框的情況下)。當鏈接被android應用程序調用時,是否會顯示類似的對話框?如果是,有沒有辦法顯示這個對話框而只是下載,使用戶不必理會該文件的獲得存儲在他的電話?

謝謝!

回答

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() 
+0

謝謝!讓我看看這個解決方案。祝你有美好的一天! – kallakafar 2013-02-16 20:06:46

相關問題