3

shouldOverrideUrlLoadingメソッドを使用してURLにアクセスしようとしています。何らかの理由で、htmlファイルに存在するURLにアクセスしようとすると、Webページが利用できませんというエラーが表示されます。以前は、htmlファイルをrawフォルダーに保存したため、URLにアクセスできましたが、アセットに移動する必要がありました。コードがこのようにすっきりしているように見えるので、フォルダ。これは私のコードです。これを解決する方法を誰かに教えてもらえますか。

webview.setWebChromeClient(new WebChromeClient());
webview.setWebViewClient(new WebViewClient());
webview.loadUrl("file:///android_asset/myfile/file.html");
webview.setVerticalScrollBarEnabled(false);
webview.setWebViewClient(new WebViewClient()
{
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        if (url.equalsIgnoreCase("some text")){
            setDialog("some fancy text");
        }
4

8 に答える 8

3

最初にファイルを取得してReal Pathから、次のように試してください。


String YourURI="/android_asset/myfile/file.html";
YourURI = new File(getRealPathFromURI(YourURI));

//Got the Real Path Of the File

private String getRealPathFromURI(Uri contentURI) {
  Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 
  cursor.moveToFirst(); 
  int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
  return cursor.getString(idx); 
}

webview.setWebChromeClient(new WebChromeClient());
webview.setWebViewClient(new WebViewClient());
webview.loadUrl(YourURI);                      //**Used the Real Path**
webview.setVerticalScrollBarEnabled(false);
webview.setWebViewClient(new WebViewClient()
{
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        if (url.equalsIgnoreCase("some text")){
            setDialog("some fancy text");
        }
}    

ファイルがSDCARDにある場合:-


webview.setWebChromeClient(new WebChromeClient());
webview.setWebViewClient(new WebViewClient());
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
  Log.d(TAG, "No SDCARD");
} 
else 
{
  webview.loadUrl("file://"+Environment.getExternalStorageDirectory()
                                   +"/android_asset/myfile/file.html");
}
webview.setVerticalScrollBarEnabled(false);
webview.setWebViewClient(new WebViewClient()
{
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        if (url.equalsIgnoreCase("some text")){
            setDialog("some fancy text");
        }
}    

最終編集:-このコードはアセットフォルダに対して完全に機能します


public class MyActivity extends Activity {  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);  
        WebView webview;  
        webview = (WebView) findViewById(R.id.webView1);  
        webview.loadUrl("file:///android_asset/myfile/file.html");
    }  
}
于 2012-08-01T10:12:31.290 に答える
1

あなたのためにも働く別の方法があります---

webView.loadData(customHtml, "text/html", "UTF-8");

ここで、custromHtmlは、表示に使用されるHTML行です。

「custromHtml」の代わりに「file://android_asset/myfile/file.html」を渡すだけです。

これでうまくいくと思います。

于 2012-07-30T04:49:18.513 に答える
1

あなたもこれを試してみることができます-

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String myURL = "file:///android_asset/index.html";
        myBrowser=(WebView)findViewById(R.id.mybrowser);

        /*By default Javascript is turned off,
         * it can be enabled by this line.
         */
        myBrowser.getSettings().setJavaScriptEnabled(true);
        myBrowser.setWebViewClient(new WebViewClient());

        myBrowser.loadUrl(myURL);

    }

また、ファイルがメインプロジェクトの正しいフォルダーに配置されていることを確認してください。これで問題がなければ、クリーンなプロジェクトを作成してプロジェクトを修正します。次に、それを実行してみてください。

于 2012-08-01T04:59:48.727 に答える
0
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String myURL = "file:///android_asset/index.html";
        myBrowser=(WebView)findViewById(R.id.mybrowser);
        myBrowser.getSettings().setJavaScriptEnabled(true);
        myBrowser.setWebViewClient(new WebViewClient());

        myBrowser.loadUrl(myURL);

    }
于 2012-07-30T10:07:40.767 に答える
0

これはうまくいくでしょう-----

"android.resource://[package]/[res type]/[res name]"

Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/raw/myvideo");

このリンクも便利です-

http://developer.android.com/reference/android/webkit/WebView.html

AndroidリソースをWebViewにロードする

于 2012-08-01T04:50:44.137 に答える
0

shouldOverrideUrlLoadingは、file://のICSでは機能しませんが、外部URLでは問題なく機能します。loadURLは、アセットフォルダーからの読み込みが正常に機能します。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    WebView web=(WebView)findViewById(R.id.webView1);

    web.setWebViewClient(new MyWebClient());
    //web.loadUrl("file:///android_asset/index.html");
    web.loadUrl("http://google.com");

....。

class MyWebClient extends WebViewClient
{
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d("MyWebClient", "url is: " + url);

        if (url.equalsIgnoreCase("google.com")){
            Log.d("MyWebClient","url is: " + url);
        }
        return false;
    }

}
于 2012-08-06T06:10:14.477 に答える
0

問題を解決したこのフォーラムソリューションを見つけました:http ://www.cynosurex.com/Forums/DisplayComments.php?file = Java / Android / Android_4_has_a_.file .... android_asset.webkit .._ bug

于 2013-03-11T00:55:20.683 に答える
-1

これを試してみるべきだと思います…。

webview.setWebChromeClient(new WebChromeClient());
webview.setWebViewClient(new WebViewClient());
webview.loadUrl("file://android_asset/myfile/file.html");
webview.setVerticalScrollBarEnabled(false);
webview.setWebViewClient(new WebViewClient()
{
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        if (url.equalsIgnoreCase("some text")){
            setDialog("some fancy text");
        }
于 2012-07-30T04:45:15.657 に答える