WebView在android中加载url超过一次

时间:2012-04-06 07:38:38

标签: android

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

我正在分割网址,因为它包含多个要在Google文档查看器上传递的网址以呈现pdf文档。 第一次正确拆分网址并将网址连接到谷歌文档中打开,但是webview通过在spliturl [1]处给出一个ArrayIndexOutOfBoundsException再次执行。 有谁能让我知道为什么再次执行。 感谢。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

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

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

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