userAsk
userAsk

Reputation: 133

Send large file in Android fast

I want to send 18 mb Data. It is working. But I have to wait too long that I get Email.

Code:

public void sendEmail()
{
    emailSendReceiver = new EmailSendBroadcastReceiver();
    EmailSend emailSend = new EmailSend();
    emailSend.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}

public class EmailSend extends AsyncTask<Void, Void, Boolean>
{
    @Override
    protected Boolean doInBackground(Void... params)
    {
        boolean bResult = false;
        String sDeviceID = configReader.getXmlValue(KEY_ID);
        Mail m = new Mail("[email protected]", "testpass");
        String[] toArr = {"[email protected]"};
        m.setTo(toArr); 
        m.setFrom("[email protected]"); 
        m.setSubject("device number : "+sDeviceID ); 
        m.setBody("device number : "+sDeviceID);
        try
        {
            String sTxtFileName = sDeviceID+"_"+".txt";
            String sFileUrl = Environment.getExternalStorageDirectory().getAbsolutePath()+"/data_source/"+sTxtFileName;
            m.addAttachment(sFileUrl);
            if(m.send())
            {
                bResult = true;
            }
            else
            {
                // something
            }
        }
        @Override
        protected void onPostExecute(Boolean result)
        {
            super.onPostExecute(result);
            if(result == true)
            {
                // something
            }
        }
    }
}

The Question is. How can I make it faster? I have 6 AsyncTask. And I don't like to make it with activity.

Upvotes: 0

Views: 113

Answers (2)

userAsk
userAsk

Reputation: 133

public void makeZip(String sFile, String zipFileName)
{
    FileOutputStream dest = null;
    ZipOutputStream out;
    byte data[];
    FileInputStream fi = null;
    int count;

    try
    {
        dest = new FileOutputStream(zipFileName);

        out = new ZipOutputStream(new BufferedOutputStream(dest));
        data = new byte[BUFFER];

        fi = new FileInputStream(sFile);

        BufferedInputStream origin = new BufferedInputStream(fi, BUFFER);
        ZipEntry entry = new ZipEntry(sFile);

        out.putNextEntry(entry);

        while((count = origin.read(data, 0, BUFFER)) != -1)
        {
            out.write(data, 0, count);
        }

        origin.close();

        out.close();
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}

Upvotes: 0

humblerookie
humblerookie

Reputation: 4957

As suggested by all It would be handy to zip or gzip the file. The same is available in

java.util.zip* package. Furthermore you could find help for the same here

Upvotes: 1

Related Questions