javascript - How to download a csv file created in JS to your android phone (webview) -
i want export csv file created in js , let people download on phone.
this js code creating file:
var createacsvfile = function () { var arrayofdatatoexport = []; (var k = 0; k < localstorage.length; k++) { console.log([localstorage.key(k),json.parse(localstorage.getitem(localstorage.key(k)))]); arrayofdatatoexport.push([localstorage.key(k),json.parse(localstorage.getitem(localstorage.key(k)))]) } var csvrows = []; for(var i=0, l=arrayofdatatoexport.length; i<l; ++i){ csvrows.push(arrayofdatatoexport[i].join(',')); } var csvstring = csvrows.join("%0a"); var = document.createelement('a'); a.href = 'data:attachment/csv,' + csvstring; a.target = '_blank'; a.download = 'exportfile.csv'; document.body.appendchild(a); a.click(); }; createacsvfile();
this android code:
protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); view = (webview) this.findviewbyid(r.id.webview); view.getsettings().setjavascriptenabled(true); view.getsettings().setallowfileaccess(true); view.getsettings().setdomstorageenabled(true); view.getsettings().setusewideviewport(true); view.getsettings().setloadwithoverviewmode(true); view.setinitialscale(1); view.getsettings().setjavascriptenabled(true); view.getsettings().setsupportzoom(false); view.setwebviewclient(new mybrowser(){ @override public void onpagefinished(webview view, string url) { //hide loading image findviewbyid(r.id.imageloading1).setvisibility(view.gone); //show webview findviewbyid(r.id.webview).setvisibility(view.visible); } }); view.loadurl("file:///android_asset/www/index.html"); view.setwebchromeclient(new webchromeclient(){ }); view.setdownloadlistener(new downloadlistener() { public void ondownloadstart(string url, string useragent, string contentdisposition, string mimetype, long contentlength) { intent = new intent(intent.action_view); i.setdata(uri.parse(url)); startactivity(i); } }); }
i error:
08-20 11:12:36.508 17111-17111/checker.coin.crypto.wingcrony.by.cryptocoinchecker e/androidruntime: fatal exception: main process: checker.coin.crypto.wingcrony.by.cryptocoinchecker, pid: 17111 android.content.activitynotfoundexception: no activity found handle intent { act=android.intent.action.view dat=data:attachment/csv,poloniex, currencyfortoshow,usd howtoorder,shortname passs,false whichexchangeyouuse,bitfinex } @ android.app.instrumentation.checkstartactivityresult(instrumentation.java:1809) @ android.app.instrumentation.execstartactivity(instrumentation.java:1523) @ android.app.activity.startactivityforresult(activity.java:3981) @ android.app.activity.startactivityforresult(activity.java:3933) @ android.app.activity.startactivity(activity.java:4272) @ android.app.activity.startactivity(activity.java:4240) @ checker.coin.crypto.wingcrony.by.cryptocoinchecker.mainactivity$3.ondownloadstart(mainactivity.java:153) @ com.android.webview.chromium.webviewcontentsclientadapter.ondownloadstart(webviewcontentsclientadapter.java:1195) @ org.chromium.android_webview.awcontentsclientcallbackhelper$myhandler.handlemessage(awcontentsclientcallbackhelper.java:126) @ android.os.handler.dispatchmessage(handler.java:111) @ android.os.looper.loop(looper.java:207) @ android.app.activitythread.main(activitythread.java:5728) @ java.lang.reflect.method.invoke(native method) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:789) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:679)
update
if add androidmanifest.xml same error:
<uses-permission android:name="android.permission.access_download_manager"/>
what did generate data need export csv in js this:
var generatethedatatoexporttoarraystring = function () { var arrayofdatatoexport = []; (var k = 0; k < localstorage.length; k++) { var keyname = (localstorage.key(k)); var data = json.parse(localstorage.getitem(localstorage.key(k))); } var string = '['; (var = 0; < arrayofdatatoexport.length; i++){ if (typeof arrayofdatatoexport[i][1] === "object"){ string += "[" + arrayofdatatoexport[i][0] + ","; if (arrayofdatatoexport[i][1].length > 1 || arrayofdatatoexport[i][1].length === 0){ if (arrayofdatatoexport[i][1].length === 0){ string += '[' + '' + ']]'; } else { (var k = 0; k < arrayofdatatoexport[i][1].length; k++){ string += '['; (var l = 0; l < arrayofdatatoexport[i][1][k].length - 1; l++){ string += arrayofdatatoexport[i][1][k][l]+ ","; } string += arrayofdatatoexport[i][1][k][arrayofdatatoexport[i][1][k].length - 1] + "],"; } string = string.slice(0, -1); string += "],"; } } else { string += "["; (var j = 0; j < arrayofdatatoexport[i][1].length - 2; j++){ string += arrayofdatatoexport[i][1][j] + ","; } string += arrayofdatatoexport[i][1][arrayofdatatoexport[i][1].length - 1] + "]],"; } } else { string += "[" + arrayofdatatoexport[i][0] + ","; string += arrayofdatatoexport[i][1] + "],"; } } string = string.slice(0, -1); string += "]"; console.log(string); };
you last thing log string. capture in java code this:
public void onconsolemessage(string message, int linenumber, string sourceid) { if (sourceid.equals("file:///android_asset/www/assets/js/parsetest.js") && linenumber == 184 ){ generatenoteonsd(getbasecontext(),"export.csv", message); } }
this function generatenoteonsd:
public void generatenoteonsd(context context, string sfilename, string sbody) { try { file root = new file(environment.getexternalstoragedirectory(), "backup_data_for_altfolio"); if (!root.exists()) { root.mkdirs(); } file gpxfile = new file(root, sfilename); filewriter writer = new filewriter(gpxfile); writer.append(sbody); writer.flush(); writer.close(); toast.maketext(context, "saved", toast.length_short).show(); } catch (ioexception e) { e.printstacktrace(); } }
Comments
Post a Comment