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

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

Swift game error message -