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:
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
Post a Comment