在Android的WebView问题 [英] WebView issue on Android

查看:164
本文介绍了在Android的WebView问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用低于code读取的.html文件的WebView,
开放的超级链接与其他浏览器的应用程序。

I use below code to read .html file with WebView,
and open hyperlink with other browser app.

webView = (WebView)findViewById(R.id.terms_of_services_webview);
String Path = "...";  //html file path
WebSettings websettings = webView.getSettings();  
websettings.setSupportZoom(true);  
websettings.setBuiltInZoomControls(true);   
websettings.setJavaScriptEnabled(true);  
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.equals(Path)) {
            view.loadUrl(url);
        }
        else {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            TermsOfServicesActivity.this.startActivity(intent);
        }
        return true;  
    }
});

webView.loadUrl(Path);  

在code都是在onCreate方法。

The code all are in onCreate method.

不过,我觉得打击code上的Galaxy Tab 8.9(安卓4.0.4):

But I find blow code on Galaxy Tab 8.9(Android 4.0.4):

11-20 16:24:49.613: W/webview(25896): java.lang.Throwable: Warning: A WebView method was called on thread 'WebViewCoreThread'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.
11-20 16:24:49.613: W/webview(25896):   at android.webkit.WebView.checkThread(WebView.java:14240)
11-20 16:24:49.613: W/webview(25896):   at android.webkit.WebView.getSettings(WebView.java:5374)
11-20 16:24:49.613: W/webview(25896):   at android.webkit.WebView.getVisibleTitleHeightImpl(WebView.java:2340)
11-20 16:24:49.613: W/webview(25896):   at android.webkit.WebView.getViewHeight(WebView.java:2382)
11-20 16:24:49.613: W/webview(25896):   at android.webkit.WebViewCore.setupViewport(WebViewCore.java:3421)
11-20 16:24:49.613: W/webview(25896):   at android.webkit.WebViewCore.didFirstLayout(WebViewCore.java:3148)
11-20 16:24:49.613: W/webview(25896):   at android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method)
11-20 16:24:49.613: W/webview(25896):   at android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113)
11-20 16:24:49.613: W/webview(25896):   at android.os.Handler.dispatchMessage(Handler.java:99)
11-20 16:24:49.613: W/webview(25896):   at android.os.Looper.loop(Looper.java:137)
11-20 16:24:49.613: W/webview(25896):   at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:828)
11-20 16:24:49.613: W/webview(25896):   at java.lang.Thread.run(Thread.java:856)
11-20 16:24:49.623: E/StrictMode(25896): null
11-20 16:24:49.623: E/StrictMode(25896): java.lang.Throwable: Warning: A WebView method was called on thread 'WebViewCoreThread'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.
11-20 16:24:49.623: E/StrictMode(25896):    at android.webkit.WebView.checkThread(WebView.java:14240)
11-20 16:24:49.623: E/StrictMode(25896):    at android.webkit.WebView.getSettings(WebView.java:5374)
11-20 16:24:49.623: E/StrictMode(25896):    at android.webkit.WebView.getVisibleTitleHeightImpl(WebView.java:2340)
11-20 16:24:49.623: E/StrictMode(25896):    at android.webkit.WebView.getViewHeight(WebView.java:2382)
11-20 16:24:49.623: E/StrictMode(25896):    at android.webkit.WebViewCore.setupViewport(WebViewCore.java:3421)
11-20 16:24:49.623: E/StrictMode(25896):    at android.webkit.WebViewCore.didFirstLayout(WebViewCore.java:3148)
11-20 16:24:49.623: E/StrictMode(25896):    at android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method)
11-20 16:24:49.623: E/StrictMode(25896):    at android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113)
11-20 16:24:49.623: E/StrictMode(25896):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-20 16:24:49.623: E/StrictMode(25896):    at android.os.Looper.loop(Looper.java:137)
11-20 16:24:49.623: E/StrictMode(25896):    at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:828)
11-20 16:24:49.623: E/StrictMode(25896):    at java.lang.Thread.run(Thread.java:856)

但它的工作原理上的的Xperia Z11(安卓4.2.2) 的Nexus 7 2013(安卓4.3.1) 华硕TF201(安卓4.1.1 )。

为什么不能在4.0.3的作品?
我怎样才能避免呢?

Why it not works on 4.0.3?
How can I avoid it?

推荐答案

作为警告说,要调用的 WebViewCoreThread web视图的方法。因此,修改code这个样子,

As the warning says you are calling the webview methods in the WebViewCoreThread. Thus modify your code like this,

YourActivity.this.runOnUiThread(new Runnable() {
    public void run() {
       websettings.setSupportZoom(true);  
       websettings.setBuiltInZoomControls(true);   
       websettings.setJavaScriptEnabled(true);  
   webView.setWebViewClient(new WebViewClient() {
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if(url.equals(Path)) {
        view.loadUrl(url);
    }
    else {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        TermsOfServicesActivity.this.startActivity(intent);
    }
    return true;  
     }
 });

  webView.loadUrl(Path);  
     }
});

试着写了下面一行在你的的onCreate()方法之前,的setContentView()

Try to write the below line in your onCreate() method before the setContentView().

  StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

这篇关于在Android的WebView问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆