【问题标题】:WebView.getUrl() returns nullWebView.getUrl() 返回 null
【发布时间】:2011-03-11 21:19:49
【问题描述】:

我对 Webview 有疑问。我正在编写自己的 WebChromeClient 类来覆盖 onProgressChanged 方法,因为我想在页面完成加载时显示页面,然后隐藏启动屏幕。因为我只是希望它发生在特定的 URL 上,所以我将实际的 WebView URL 与特定的字符串进行比较,但是有一个问题,当调用 webview.getUrl() 方法并且我的应用程序完成时,我得到一个空指针。

这是代码:

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);
        }
    }
}

我这样做是为了避免 webview 需要三到四秒钟来呈现页面,但它不起作用。我之前使用的代码是:

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);
        }
    }
}

【问题讨论】:

    标签: android webview geturl


    【解决方案1】:

    不确定WebChromeClient 是否可行,但我可以使用

    WebViewClient 和重载 onLoadResourceonReceivedErroronPageFinished

    这就是我所做的

    onLoadResource     
     mwebview.setVisibility(View.GONE);
    
    
    onReceivedError
    mwebview.setVisibility(View.VISIBLE);
    
    onPageFinished
    mwebview.setVisibility(View.VISIBLE);
    

    最初在 XML 中,webview 设置为 GONE

    android:visibility="gone"
    

    我也将它用于 Facebook 并且工作正常。

    【讨论】:

    • 感谢您的回复。我已经尝试过了,但是当我隐藏启动屏幕时,webview 会保持空白三到四秒钟,直到页面被渲染。那是我想解决的问题,我不知道如何避免这种情况。我已经用我使用的代码编辑了我的问题。
    • 我更新了我的草稿代码。请注意,对于图像、css 等其他元素,也会调用一些 url 覆盖方法。
    • 你给我的解决方案很好,虽然它存在一些闪烁,因为有一些页面重定向并且onPageFinished被调用了两三次,所以显示了webview但OnLoadResource再次隐藏它直到最后一页已加载。正如我所说,该解决方案工作得很好,但我想解决这个问题。谢谢大家。
    • 我知道重定向和闪烁,如果您跟踪它们,您可以进一步优化它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2020-06-19
    • 2011-10-15
    相关资源
    最近更新 更多