I have an appengine application serving zip files from the blob-store. When I use this URL+query :
from Chrome or Firefox the file gets downloaded! How do I download the same file in a service within an android app?
I would appreciate code.
I have an appengine application serving zip files from the blob-store. When I use this URL+query :
from Chrome or Firefox the file gets downloaded! How do I download the same file in a service within an android app?
I would appreciate code.
 
    
    OK I got it through trial and error using using an HttpClient & an HttpGet.
private boolean downloadFile(String query) 
    {
        Log.d(TAG, "trying to download file");
        boolean downloadSuccessful = false;
        if(!fileName.endsWith(".zip"))
        {
            fileName += ".zip"; 
            Log.d(TAG, "added zip to file name");
        }    
        is = null;
        bis = null;
        fos = null;
        bos = null;
        outFile = null;
        int counter = 0;
        while(!downloadSuccessful && counter < 5)
        {
            Log.d(TAG + ".downloadFile()", "attempt number: " + counter);
            try
            {
                //connect(query);
                HttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(query);
                HttpResponse response = null;
                try 
                {
                  response = client.execute(httpGet);
                  StatusLine statusLine = response.getStatusLine();
                  int statusCode = statusLine.getStatusCode();
                  Log.d(TAG, "statusCode: " + statusCode);
                  if (statusCode == 200) 
                  {
                    HttpEntity entity = response.getEntity();
                    is = entity.getContent();
                    bis = new BufferedInputStream(is);
                  } 
                  else 
                  {
                    Log.e(TAG, "Failed to download file");
                  }
                } 
                catch (ClientProtocolException e) 
                {
                    Log.e(TAG, e.getMessage());
                } 
                catch (IOException e) 
                {
                    Log.e(TAG, e.getMessage());
                }
                Header[] hs = response.getAllHeaders();
                if(hs == null)
                {
                    Log.e(TAG, "Headers are null ");
                    return false;
                }
                for(Header h: hs)
                {
                    Log.d(TAG, "Header values: " + h.getValue());
                }
                fileSize = 200000;
                if(counter == 0)
                {
                    Log.e(TAG, "File size is: " + fileSize);
                }
                else
                {
                    Log.e(TAG, "This is what's left to download: " + fileSize);
                }
                sendNotifiction("Connecting", "Connecting...", "Spice bundle: " + fileName);
                updateUser(MESSAGE_CONNECTING_STARTED, fileSize / 1024);
                outFile = new File(ZIP_LOCATION + "/" + fileName);
                fos = new FileOutputStream(outFile);
                bos = new BufferedOutputStream(fos, DOWNLOAD_BUFFER_SIZE);
                data = new byte[DOWNLOAD_BUFFER_SIZE];
                bytesRead = 0; 
                totalRead = 0;
                downloadSuccessful = download();
                Log.d(TAG, "Total bytes Read: " + totalRead + " of: " + fileSize);
                if(totalRead == fileSize)
                {
                    downloadSuccessful = true;
                    Log.e(TAG, "Download successful use this message wairily");
                }
                else
                {
                    Log.e(TAG, "Download fubar");
                }
            }
            catch(FileNotFoundException e)
            {
                Log.e(TAG, "FileNotFoundException: " + e.getMessage());
                notificationFlash = "Error downloading";
                notificationTitle = "Error";
                notificationText = "Spice bundle: " + fileName;
                sendNotifiction(notificationFlash, notificationTitle, notificationText);
                updateUser(MESSAGE_DOWNLOAD_ERROR, 0);
            }
            catch(NullPointerException e)
            {
                Log.e(TAG, "NullPointerException");
            }
            catch(IllegalStateException e)
            {
                Log.e(TAG, e.getMessage());
            }
            catch(Exception e)
            {
                Log.e(TAG, "Exception: " + e.getMessage());
                notificationFlash = "Error downloading";
                notificationTitle = "Error";
                notificationText = "Spice bundle: " + fileName;
                sendNotifiction(notificationFlash, notificationTitle, notificationText);
                updateUser(MESSAGE_DOWNLOAD_ERROR, 0);
            }
            counter++;
        }
        try 
        {
            if(bos != null)
            {
                bos.close();
            }
            if(fos != null)
            {
                fos.close();
            }
            if(bis != null)
            {
                bis.close();
            }
            if(is != null)
            {
                is.close();
            }
        } 
        catch (IOException e) 
        {
            Log.e(TAG + " given up downloading", "IOException thrown");
            notificationFlash = "Error downloading";
            notificationTitle = "Error";
            notificationText = "Spice bundle: " + fileName;
            sendNotifiction(notificationFlash, notificationTitle, notificationText);
            updateUser(MESSAGE_DOWNLOAD_ERROR, 0);
        }
        return downloadSuccessful;
    }
    private boolean download() 
    {
        boolean downloadComplete = false;
        try
        {
            while(!this.isCancelled())
            {
                bytesRead = bis.read(data, 0, data.length);
                if( bytesRead < 0)
                {
                    downloadComplete = true;
                    break;
                }
                bos.write(data, 0, bytesRead);
                totalRead += bytesRead;
                int totalReadInKB = totalRead / 1024;
                if(totalReadInKB % 100 == 0)
                {
                    Log.d(TAG, "Total Read In KB: " + totalReadInKB + " of: " + fileSize/1024);
                    updateUser(MESSAGE_UPDATE_PROGRESS_BAR, totalReadInKB);
                }
            }
        }
        catch(IOException e)
        {
            Log.e(TAG + ".download()", e.getMessage());
            Log.e(TAG + ".download()", "IOException thrown download incomplete");
        }
        finally
        {
            try 
            {
                bos.flush();
            } 
            catch (IOException e) 
            {
                Log.e(TAG + ".download()", e.getMessage());
                Log.e(TAG + ".download()", "IOException thrown couldn't flush");
            }
        }
        return downloadComplete;
    }
