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

PDFドキュメントをレンダリングするためにGoogleドキュメントビューアに渡される複数のURLが含まれているため、URLを分割しています。初めてURLが正しく分割され、URLが連結されてGoogleドキュメントで開かれますが、spliturl [1]でArrayIndexOutOfBoundsExceptionを指定することにより、Webビューがそこで再度実行されます。なぜこれが再び実行されるのか誰かに教えてもらえますか?ありがとう。

4

2 に答える 2

2

なぜ複数回呼び出されるのかはわかりませんが、解決策は shouldOverrideUrlLoading ではなく onPageStarted で処理することです

    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 に答える