2011-10-20 163 views
0

發送.zips到Android應用我設計的應用程序,將從服務器檢索.zip文件和提取到的SD卡上接待。的最佳方式從服務器

我想我可以搞清楚,但我不知道從服務器發送.zip的最佳方式是什麼。現在只需要一種方法,但在未來我想增加版本控制,如果這很重要的話。

我做了一些研究,看着JSON,但我找不到任何發送.zip文件的例子。一個http連接似乎是一個可比較的選項,我知道我可以接收.zip,但我不認爲版本控制會很容易實現。對這兩種方法的任何建議,或者如果你認爲另一種方式會更好,我也接受。

+0

JSON是通過HTTP連接發送的數據格式。你的zip文件存儲在哪裏(http服務器,ftp服務器,其他)?如果它是一個http服務器,你使用標準的http,asp.net,java? – kmehta

+0

我想使用http只是因爲我認爲它會更容易實現,但如果使用java或其他的東西會更有用我可以使用它 –

回答

0

使用清單文件並首先獲取。檢查清單文件(包含其他文件列表的文件)並查看本地存儲是否包含這些文件。如果確實如此 - 每個人都很開心。如果不存在,那麼將清單列出的文件放到本地存儲中。

請勿直接使用上述代碼。使用一些用戶界面反饋來告訴用戶你正在下載一些文件(並且最好先問問他們是否需要交換到wifi)。首先獲取清單是可以的,只要不詢問它們即可獲取缺失的文件。

我這樣做是爲了我的遊戲「條形碼野獸」,它首次下載大約20Mb的音頻資產。我還可以添加更多的音頻位而不必推出新版本。 Android也足夠聰明地解壓zip文件,但同樣要確保你告訴用戶發生了什麼情況,並讓他們能夠取消或返回而不會中斷主要活動線程。

+1

理查德是正確的,因爲你一定要添加一些代碼來向用戶展示你在做什麼。 我實際上使用php來獲取服務器上的文件,並在響應頭中添加了原始文件名和內容長度。 我有一個按鈕在應用程序中開始下載,當它被擊中時,我在「AsyncTask」中完成整個下載。此外,我顯示一個'ProgressDialog'和第一個閱讀器的標題信息來獲取內容的長度,所以我有一個進度條。 我的答案中的代碼只是一個例子 - 但絕對不完整。 – Jens

+0

我需要用戶能夠選擇單獨的文件下載,因爲他們希望,我知道清單文件可用於版本控制,但再次,即時通訊嘗試學習,所以我真的不知道我是否可以使其工作與能選擇每個單獨的文件下載 –

+0

我認爲你在一個問題中要求太多 - 你可能需要分解它,以便可以獲得所有組成位並將它們粘合在一起。聽起來好像你需要1)文件比較/版本控制2)android複選框/列表來選擇更改的3)異步下載。我敢肯定,如果你要求一些例子,那麼你最終會得到一個例子。我會剪切和粘貼我的,但它不完全是你想要的(特別是對於個人選擇)。 –

0

我認爲你可以在android網站上使用標準HttpUrlConnection,並給它一個URL指向你的服務器上的zip文件。

然後,您可以將其下載到設備上的本地文件夾中。 下面是我如何下載Excel文件的示例(zip和excel文件都是二進制文件 - 所以它應該是相同的)。

當你想做某種版本控制時,你最好在服務器端(如果可能的話)用服務器提供的任何東西(例如php)來做這件事。 然後製作一個小php腳本,檢查可用zip文件的版本併發送響應(也許是一個json響應)。

 URL url = new URL("yourURL"); 

     HttpURLConnection httpConnection = (HttpURLConnection) url 
       .openConnection(); 
     httpConnection.setRequestMethod("GET"); 
     httpConnection.setDoOutput(true); 
     httpConnection.connect(); 


     InputStream input = httpConnection.getInputStream(); 

     OutputStream output = new FileOutputStream(new File(activity 
       .getFilesDir().getPath() + "/" + "yourFileName.zip")); 

     byte buffer[] = new byte[1024]; 

     int len1 = 0; 
     int bytesWritten = 0; 
     while ((len1 = input.read(buffer)) > 0) { 
      output.write(buffer, 0, len1); 
      bytesWritten += len1; 
     } 

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

我可以使用json檢查兩個設備上的清單文件的內容嗎? –

+0

服務器端有什麼技術可用? – Jens

+0

我有或沒有可用的? –

相關問題