Android webview listening for errors and loading dialog -
according highly-regarded answers (1,2), following code should open website in webview , listen errors on page. however, fails @ first hurdle - website (google) in webview doesn't load (i have internet connection). why that? moreover, if open drawer android button , click "try again/refresh", drawer disappears , loading dialog appears, stops responding button.
mainactivity.java
public class mainactivity extends appcompatactivity implements navigationview.onnavigationitemselectedlistener { progressdialog progress; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); webview webview = (webview) findviewbyid(r.id.webview); webview.getsettings().setjavascriptenabled(true); webview.setwebviewclient(new webviewclient() { drawerlayout drawer = (drawerlayout) findviewbyid(r.id.drawer_layout); @override public boolean shouldoverrideurlloading(webview view, string urlnewstring) { view.loadurl("http://www.google.com"); return true; } @override public void onpagestarted(webview view, string url, bitmap facicon) { progress = progressdialog.show(mainactivity.this, "", "loading...", true); } @override public void onpagefinished(webview view, string url) { drawer.closedrawer(gravitycompat.start); progress.dismiss(); } public void onreceivederror(webview view, int errorcode, string description, string failingurl) { view.loadurl("file:///android_asset/www/error.html"); drawer.opendrawer(gravitycompat.start); progress.dismiss(); } }); toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(toolbar); drawerlayout drawer = (drawerlayout) findviewbyid(r.id.drawer_layout); actionbardrawertoggle toggle = new actionbardrawertoggle( this, drawer, toolbar, r.string.navigation_drawer_open, r.string.navigation_drawer_close); drawer.setdrawerlistener(toggle); toggle.syncstate(); navigationview navigationview = (navigationview) findviewbyid(r.id.nav_view); navigationview.setnavigationitemselectedlistener(this); } @override public void onbackpressed() { drawerlayout drawer = (drawerlayout) findviewbyid(r.id.drawer_layout); if (drawer.isdraweropen(gravitycompat.start)) { drawer.closedrawer(gravitycompat.start); } else { drawer.opendrawer(gravitycompat.start); } } @override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { int id = item.getitemid(); if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } @suppresswarnings("statementwithemptybody") @override public boolean onnavigationitemselected(menuitem item) { webview webview = (webview) findviewbyid(r.id.webview); int id = item.getitemid(); if (id == r.id.nav_refresh) { webview.loadurl("javascript:window.location.reload(true)"); progress = progressdialog.show(this, "", "loading...", true); } else if (id == r.id.nav_home) { webview.loadurl("http://www.google.com"); } drawerlayout drawer = (drawerlayout) findviewbyid(r.id.drawer_layout); drawer.closedrawer(gravitycompat.start); return true; } }
fixed it. error in
public boolean shouldoverrideurlloading(webview view, string urlnewstring) { view.loadurl("http://www.google.com"); return true; } which should be
public boolean shouldoverrideurlloading(webview view, string urlnewstring) { view.loadurl(urlnewstring); return true; } and load actual url outside setwebviewclient:
webview.loadurl("http://www.google.com");
Comments
Post a Comment