1

android中的webview在加载url时不止一次加载。下面是代码。

 public boolean shouldOverrideUrlLoading(WebView view, String url)
            {

                if (url.contains(".pdf")) {
                    String[] spliturl = url.split("http://someurl/");
                    String googleurl = "http://docs.google.com/viewer?embedded=true&url=";
                    System.out.println("Google Url"+googleurl);
                    System.out.println("spliturl"+spliturl[1]);
                     view.loadUrl(googleurl+spliturl[1]);
                }
                else
                     view.loadUrl(url);

                return true;
            }
        });

我正在拆分 url,因为它包含多个要在 google 文档查看器上传递以呈现 pdf 文档的 url。第一次正确拆分 url 并连接 url 以在 google docs 中打开,但 webview 通过在 spliturl[1] 处给出 ArrayIndexOutOfBoundsException 再次执行。任何人都可以让我知道为什么这会再次执行。谢谢。

4

2 回答 2

2

我不知道为什么它会被多次调用,但解决方案是在 onPageStarted 而不是 shouldOverrideUrlLoading 中处理它

    boolean calledOnce=false;

public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);

        return true;
    }

public void onPageStarted(WebView view, String url, Bitmap favicon) {
    if (url.contains(".pdf") && !calledOnce) {
            String[] spliturl = url.split("http://someurl/");
            String googleurl = "http://docs.google.com/viewer?embedded=true&url=";
            System.out.println("Google Url"+googleurl);
            System.out.println("spliturl"+spliturl[1]);
            url = googleurl+spliturl[1];
            calledOnce = true;
        }       
    super.onPageStarted(view, url, favicon);
}
于 2012-04-06T07:57:59.770 回答
1

您应该始终检查数组的大小是否大于请求的索引:

if (url.contains(".pdf") && url.split("http://someurl/").size()>2){
// your code
}

不知道为什么会调用它-可能是多次重定向。

于 2012-04-06T07:43:49.430 回答