Android Java - How to download zip file from URL? -


hey im making new project requires download files dropbox. added new class called downloadfile has code download file. reason app crashes when click download. thanks.

heres downloadfile:

    package com.matt7262.download.app;      import android.support.v7.app.actionbaractivity;     import android.os.bundle;     import android.view.menu;     import android.view.menuitem;     //chat bot library     import org.alicebot.ab.chat;     import org.alicebot.ab.bot;      import android.view.view;     import android.widget.button;     import android.os.environment;     import android.widget.textview;     import android.widget.toast;      import java.io.inputstream;     import java.net.url;     import java.io.datainputstream;     import java.io.dataoutputstream;     import java.io.file;     import java.io.filenotfoundexception;     import java.io.fileoutputstream;     import java.io.ioexception;     import java.net.httpurlconnection;     import java.net.malformedurlexception;     import android.widget.progressbar;     import java.net.url;     import java.net.urlconnection;     import android.app.activity;     import android.app.progressdialog;     import android.os.environment;     import android.view.view.onclicklistener;      public class downloadfile extends actionbaractivity{      public void updateprogress(int currentsize, int totalsize)     {         toast.maketext(getapplicationcontext(), "loading files...",                 toast.length_short).show();     }      public void download()     {         try {             //set download url, url points file on internet             //this file downloaded             url url = new url("https://dl.dropboxusercontent.com/shz/9cyfz0b45mj6szr/7pbuupnz3n/xecta?token_hash=aaes9cdfswt98d1ihlnab4dhwhwh5z2lmhq_n6h-2m0lwg&top_level_offset=6");              //create new connection             httpurlconnection urlconnection = (httpurlconnection) url.openconnection();              //set things on connection             urlconnection.setrequestmethod("get");             urlconnection.setdooutput(true);              //and connect!             urlconnection.connect();              //set path want save file             //in case, going save on root directory of             //sd card.             file sdcardroot = environment.getexternalstoragedirectory();             //create new file, specifying path, , filename             //which want save file as.             file file = new file(sdcardroot,"hello.zip");              //this used write downloaded data file created             fileoutputstream fileoutput = new fileoutputstream(file);              //this used in reading data internet             inputstream inputstream = urlconnection.getinputstream();              //this total size of file             int totalsize = urlconnection.getcontentlength();             //variable store total downloaded bytes             int downloadedsize = 0;              //create buffer...             byte[] buffer = new byte[1024];             int bufferlength = 0; //used store temporary size of buffer              //now, read through input buffer , write contents file             while ( (bufferlength = inputstream.read(buffer)) > 0 ) {                 //add data in buffer file in file output stream (the file on sd card                 fileoutput.write(buffer, 0, bufferlength);                 //add size know how downloaded                 downloadedsize += bufferlength;                 //this report prgress, maybe                 updateprogress(downloadedsize, totalsize);              }             //close output stream when done             fileoutput.close();              //catch possible errors...         } catch (malformedurlexception e) {             e.printstacktrace();         } catch (ioexception e) {             e.printstacktrace();         }     }     } 

mainactivity:

package com.matt7262.download.app;  import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.view.menu; import android.view.menuitem; //chat bot library import org.alicebot.ab.chat; import org.alicebot.ab.bot;  import android.view.view; import android.widget.button; import android.os.environment; import android.widget.textview; import android.widget.toast;  import android.os.asynctask;  public class mainactivity extends actionbaractivity {      textview input;     string dpath = environment.getexternalstoragedirectory().getabsolutepath() + "/download";     private downloadfile df;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);     }      //edittext medit = (edittext)findviewbyid(r.id.edittext1);      public void buttononclick(view v)     {         input = (textview) findviewbyid(r.id.edittext1);          string dbpath = environment.getexternalstoragedirectory().getabsolutepath() + "/download/ab";          button button=(button) v;          //creating bot         string botname="xecta";         string path= dbpath;         bot xecta = new bot(botname, path);          chat chatsession = new chat(xecta);          string request = input.gettext().tostring();         string response = chatsession.multisentencerespond(request);         ((button) v).settext(response);     }      public void onclickdownload(view view)     {         df.download();     }      @override     public boolean oncreateoptionsmenu(menu menu) {          // inflate menu; adds items action bar if present.         getmenuinflater().inflate(r.menu.main, menu);         return true;     }      @override     public boolean onoptionsitemselected(menuitem item) {         // handle action bar item clicks here. action bar         // automatically handle clicks on home/up button, long         // specify parent activity in androidmanifest.xml.         int id = item.getitemid();         if (id == r.id.action_settings) {             return true;         }         return super.onoptionsitemselected(item);     }      /*public void updateprogress(int currentsize, int totalsize)     {         toast.maketext(getapplicationcontext(), "retrieving files...",                 toast.length_short).show();     }/*      /*public void download()     {         try {             //set download url, url points file on internet             //this file downloaded             url url = new url("https://dl.dropboxusercontent.com/shz/9cyfz0b45mj6szr/7pbuupnz3n/xecta?token_hash=aaes9cdfswt98d1ihlnab4dhwhwh5z2lmhq_n6h-2m0lwg&top_level_offset=6");              //create new connection             httpurlconnection urlconnection = (httpurlconnection) url.openconnection();              //set things on connection             urlconnection.setrequestmethod("get");             urlconnection.setdooutput(true);              //and connect!             urlconnection.connect();              //set path want save file             //in case, going save on root directory of             //sd card.             file sdcardroot = environment.getexternalstoragedirectory();             //create new file, specifying path, , filename             //which want save file as.             file file = new file(sdcardroot,"hello.zip");              //this used write downloaded data file created             fileoutputstream fileoutput = new fileoutputstream(file);              //this used in reading data internet             inputstream inputstream = urlconnection.getinputstream();              //this total size of file             int totalsize = urlconnection.getcontentlength();             //variable store total downloaded bytes             int downloadedsize = 0;              //create buffer...             byte[] buffer = new byte[1024];             int bufferlength = 0; //used store temporary size of buffer              //now, read through input buffer , write contents file             while ( (bufferlength = inputstream.read(buffer)) > 0 ) {                 //add data in buffer file in file output stream (the file on sd card                 fileoutput.write(buffer, 0, bufferlength);                 //add size know how downloaded                 downloadedsize += bufferlength;                 //this report prgress, maybe                 updateprogress(downloadedsize, totalsize);              }             //close output stream when done             fileoutput.close();           //catch possible errors...         } catch (malformedurlexception e) {             e.printstacktrace();         } catch (ioexception e) {             e.printstacktrace();         }     }*/   } 

i think got out of logcat:

logcat

you declaring downloadfile object not initializing it.

private downloadfile df; df.download(); // throws npe 

don't forget initialize it.

private downloadfile df = new downloadfile(); df.download(); 

edit:

now initialised object , avoided npe time getting networkonmainthreadexception. after honeycomb version, android not allow network operations on main thread. can use asynctask overcome this.


Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -