2012-07-24 35 views
3

我想使用shouldOverrideUrlLoading方法访问URL。由于某种原因,当我尝试访问存在于html文件中的url时,我得到的网页不可用error.Previously我可以访问url,因为我将我的html文件存储在原始文件夹中,但我需要将其移动到资源因为代码看起来比较干净。这是我的代码,有谁能让我知道如何解决这个问题。无法访问从Android Webview的HTML文件中存在的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"); 
     } 
+2

你为什么打电话setWebViewClient()两次?也是你的HTML文件在子文件夹中或直接在资产文件夹中? – FoamyGuy 2012-07-24 17:53:11

+0

感谢蒂姆,我真的错过了,但耶文件是在资产的文件夹的子文件夹.. – user788511 2012-07-24 17:56:12

+0

这是什么表现,而不是网页的?当loadUrl调用发生时,logcat中是否有消息? – FoamyGuy 2012-07-24 17:57:57

回答

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

如果文件是在SD卡: -


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

最后编辑: - 此代码完美Works的资产文件夹


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"); 
    } 
} 
+0

Haresh,你能为我提供一个坚实的例子吗? – user788511 2012-08-02 18:09:36

+0

Haresh我得到文件无法解析为类型错误,我不能进步,请告知 – user788511 2012-08-06 17:38:53

+0

该文件是否位于SDCARD?如果是这样,然后尝试最新的编辑我的答案 – 2012-08-07 04:35:41

-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"); 
     } 
+0

它应该是'文件:///''没有文件://' – 2012-07-30 04:47:21

1

还有另一种方式,也为你工作---

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

其中custromHtml是HTML线用于显示。

您只需传递“file://android_asset/myfile/file.html”的“custromHtml”位置即可。

我认为这应该工作。

+0

这听起来比你的其他的答案更正确的... – 2012-07-30 05:06:53

+0

谢谢亚历... – 2012-07-30 05:24:43

+0

这不是工作要么家伙.. – user788511 2012-07-31 17:12:29

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

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

    } 

并且还检查您是否已将文件放置在主项目的正确文件夹中。如果这一切都可以,请做一个干净的项目并修复项目。然后尝试运行它。

+0

感谢库马尔,我按照您的建议,但我不能让shouldOverrideUrlLoading指向我想show..this是如此令人沮丧的对话框,它不能访问HTML中的资产文件文件夹 – user788511 2012-08-02 18:08:19

0

shouldOverrideUrlLoading文件在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; 
    } 

} 
相关问题