2012-04-06 11 views
1

webviewはURLをロード中に複数回読み込まれます。 以下はそのコードです。WebViewはurlを1回以上ロードしますが、アンドロイドの

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ドキュメントで開かれますが、webビューはspliturl [1]でArrayIndexOutOfBoundsExceptionを指定して再度実行されます。 誰でも私になぜこの実行が再開したのかを教えてもらえますか?ありがとう。

+0

あなたが直接PDFファイルを開いた場合、それはより多くのサンプルになりますことがありナビゲータ: 文字列googleDocsUrl = "http://docs.google.com/viewer?url="+documentUrl; \t \t \t 意図インテント=新しいインテント(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(googleDocsUrl)、 "text/html"); startActivity(インテント); –

答えて

1

配列はインデックスが要求されたよりも多くのサイズがある場合は、必ずチェックする必要があります:それはしかし呼び出される理由は分からないのです

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

を - おそらく、複数のリダイレクトを。

+0

お返事ありがとうございます。 – Mukunda

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); 
} 
関連する問題