Webviewに問題があります。onProgressChangedメソッドをオーバーライドする独自のWebChromeClientクラスをプログラミングしています。これは、ページの読み込みが完了したときにページを表示してから、スプラッシュ画面を非表示にするためです。特定のURLで発生させたいので、実際のWebView URLを特定の文字列と比較しますが、問題がありますwebview.getUrl()
。メソッドが呼び出されてアプリケーションが終了すると、nullポインターが返されます。
これはコードです:
private class MyWebChromeClient extends WebChromeClient {
@Override
public void onProgressChanged (WebView webview, int newProgress) {
super.onProgressChanged(webview,newProgress);
if(webview.equals(w1) && newProgress == 100 && webview.getUrl().startsWith("https://ssl.facebook.com/login.php")) {
webview.setVisibility(WebView.VISIBLE);
ImageView imageview = (ImageView)findViewById(R.id.ivsplash);
imageview.setVisibility(ImageView.GONE);
ProgressBar progressbar = (ProgressBar)findViewById(R.id.pbsplash);
progressbar.setVisibility(ProgressBar.GONE);
}
}
}
これは、Webビューがページをレンダリングするのに3〜4秒かかるのを避けるためですが、機能しません。以前に使用したコードは次のとおりです。
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url) {
super.shouldOverrideUrlLoading(webview, url);
webview.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView webview, String url) {
if(url.startsWith("https://ssl.facebook.com/login.php")) {
webview.setVisibility(WebView.VISIBLE);
ImageView imageview = (ImageView)findViewById(R.id.ivsplash);
imageview.setVisibility(ImageView.GONE);
ProgressBar progressbar = (ProgressBar)findViewById(R.id.pbsplash);
progressbar.setVisibility(ProgressBar.GONE);
}
}
}