2011-10-20 128 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

我有或没有可用的? –

相关问题