android webview.loadUrl无法加载其他网页

yansun0

在我简单的android应用中,我以编程方式在WebView中加载网页。它最初从默认网页开始,然后根据第一个网页的用户输入加载下一个网页。JavaScript通过消息将信息传递回事物的Android端。一切正常,除非无论我做什么和提供哪个URL都不加载第二个网页。当我加载第二个测试时,出现警告“所有WebView方法必须在同一线程上调用”。但是据我所知,我没有使用多线程,也不需要使用多线程。

以下是相关代码:

public class MainActivity extends Activity {
    public WebView myWebView;
    public int state;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main);

        myWebView = (WebView) findViewById(R.id.webview);

        WebSettings myWebViewSettings = myWebView.getSettings();
        myWebViewSettings.setJavaScriptEnabled(true);
        myWebViewSettings.setDomStorageEnabled(true);
        myWebViewSettings.setAllowFileAccessFromFileURLs(true);
        myWebViewSettings.setAllowUniversalAccessFromFileURLs(true);

        myWebView.addJavascriptInterface(new JavascriptHandler(), "cpjs");

        state = 0;
        loadNextTest();
    }

    public void webviewLoadURL(String url) {
        Log.d("app", "now loading " + url);
        myWebView.clearHistory();
        myWebView.clearFormData();
        myWebView.clearCache(true);
        myWebView.loadUrl(url);
    }

    final class JavascriptHandler {
           @JavascriptInterface
           public void sendToAndroid(String text) {
                if (text.equals("confirmed at target")) {
                    loadNextTest();
                }
           }
    }

    public void loadNextTest() {
        Log.d("app", "now loading test " + (state + 1));
        if (state == 0) {
            webviewLoadURL("file:///android_asset/test1.html");
            state = state + 1;

        } else if (state == 1) {
            webviewLoadURL("file:///android_asset/test2.html");
            // webviewLoadURL("http://www.google.com");
            state = state + 1;

        } else {
            webviewLoadURL("file:///android_asset/test3.html");
        }
    }
}

这是相关的日志行:

02-22 09:12:32.250: V/WebViewChromium(15117): Binding Chromium to the background looper Looper (main, tid 1) {41c7ec00}
02-22 09:12:32.250: I/chromium(15117): [INFO:library_loader_hooks.cc(112)] Chromium logging enabled: level = 0, default verbosity = 0
02-22 09:12:32.255: I/BrowserProcessMain(15117): Initializing chromium process, renderers=0
02-22 09:12:32.265: W/chromium(15117): [WARNING:proxy_service.cc(888)] PAC support disabled because there is no system implementation
02-22 09:12:32.315: D/dalvikvm(15117): GC_FOR_ALLOC freed 86K, 5% free 3217K/3364K, paused 8ms, total 8ms
02-22 09:12:32.315: I/dalvikvm-heap(15117): Grow heap (frag case) to 4.273MB for 1127536-byte allocation
02-22 09:12:32.325: D/dalvikvm(15117): GC_FOR_ALLOC freed <1K, 4% free 4318K/4468K, paused 11ms, total 11ms
02-22 09:12:32.345: D/dalvikvm(15117): GC_CONCURRENT freed <1K, 4% free 4317K/4468K, paused 1ms+6ms, total 17ms
02-22 09:12:32.365: D/app(15117): now loading test 1
02-22 09:12:32.365: D/app(15117): now loading file:///android_asset/test1.html
02-22 09:12:32.450: D/mali_winsys(15117): new_window_surface returns 0x3000
02-22 09:12:32.460: I/Icing(794): Indexing 5AA949AFB589F1D17D8668589402D01E615E228D from com.google.android.googlequicksearchbox
02-22 09:12:32.500: D/OpenGLRenderer(15117): Enabling debug mode 0
02-22 09:12:32.505: W/AwContents(15117): nativeOnDraw failed; clearing to background color.
02-22 09:12:32.540: I/ActivityManager(447): Displayed com.example.myApp/.MainActivity: +344ms
02-22 09:12:32.550: W/AwContents(15117): nativeOnDraw failed; clearing to background color.
02-22 09:12:32.635: I/Icing(794): Indexing done 5AA949AFB589F1D17D8668589402D01E615E228D
02-22 09:12:32.945: I/chromium(15117): [INFO:async_pixel_transfer_manager_android.cc(56)] Async pixel transfers not supported
02-22 09:12:32.960: I/chromium(15117): [INFO:async_pixel_transfer_manager_android.cc(56)] Async pixel transfers not supported
02-22 09:12:33.180: E/AndroidProtocolHandler(15117): Unable to open asset URL: file:///android_asset/backend/images/ajax-loader.gif
02-22 09:12:46.010: D/app(15117): now loading test 2
02-22 09:12:46.010: D/app(15117): now loading http://www.google.com
02-22 09:12:46.020: W/WebView(15117): java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {41c7ec00} called on Looper (JavaBridge, tid 271) {41c6f5c8}, FYI main Looper is Looper (main, tid 1) {41c7ec00})
02-22 09:12:46.020: W/WebView(15117):   at android.webkit.WebView.checkThread(WebView.java:2063)
02-22 09:12:46.020: W/WebView(15117):   at android.webkit.WebView.clearHistory(WebView.java:1399)
02-22 09:12:46.020: W/WebView(15117):   at com.example.myApp.MainActivity.webviewLoadURL(MainActivity.java:68)
02-22 09:12:46.020: W/WebView(15117):   at com.example.myApp.MainActivity.loadNextTest(MainActivity.java:91)
02-22 09:12:46.020: W/WebView(15117):   at com.example.myApp.MainActivity$JavascriptHandler.sendToAndroid(MainActivity.java:78)
02-22 09:12:46.020: W/WebView(15117):   at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
02-22 09:12:46.020: W/WebView(15117):   at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
02-22 09:12:46.020: W/WebView(15117):   at android.os.Handler.dispatchMessage(Handler.java:102)
02-22 09:12:46.020: W/WebView(15117):   at android.os.Looper.loop(Looper.java:136)
02-22 09:12:46.020: W/WebView(15117):   at android.os.HandlerThread.run(HandlerThread.java:61)
02-22 09:12:46.030: W/System.err(15117): java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {41c7ec00} called on Looper (JavaBridge, tid 271) {41c6f5c8}, FYI main Looper is Looper (main, tid 1) {41c7ec00})
02-22 09:12:46.035: W/System.err(15117):    at android.webkit.WebView.checkThread(WebView.java:2073)
02-22 09:12:46.035: W/System.err(15117):    at android.webkit.WebView.clearHistory(WebView.java:1399)
02-22 09:12:46.035: W/System.err(15117):    at com.example.myApp.MainActivity.webviewLoadURL(MainActivity.java:68)
02-22 09:12:46.035: W/System.err(15117):    at com.example.myApp.MainActivity.loadNextTest(MainActivity.java:91)
02-22 09:12:46.035: W/System.err(15117):    at com.example.myApp.MainActivity$JavascriptHandler.sendToAndroid(MainActivity.java:78)
02-22 09:12:46.035: W/System.err(15117):    at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
02-22 09:12:46.040: W/System.err(15117):    at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
02-22 09:12:46.040: W/System.err(15117):    at android.os.Handler.dispatchMessage(Handler.java:102)
02-22 09:12:46.040: W/System.err(15117):    at android.os.Looper.loop(Looper.java:136)
02-22 09:12:46.040: W/System.err(15117):    at android.os.HandlerThread.run(HandlerThread.java:61)
02-22 09:12:46.040: W/System.err(15117): Caused by: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {41c7ec00} called on Looper (JavaBridge, tid 271) {41c6f5c8}, FYI main Looper is Looper (main, tid 1) {41c7ec00})
02-22 09:12:46.045: W/System.err(15117):    at android.webkit.WebView.checkThread(WebView.java:2063)
02-22 09:12:46.045: W/System.err(15117):    ... 9 more

任何帮助表示赞赏。谢谢。

卡萨克

正如ProfessorT所提到的,WebView在后台运行着许多线程,并且通过JavaScript接口对象从JavaScript进行的回调是在后台线程上进行的。

您可以在内部使用loadNextTest以下代码来实现所需的功能

myWebView.post(new Runnable() {
    @Override
    public void run() {
        webviewLoadURL("file:///android_asset/test1.html");
    }
});

另请注意,您的state变量也将写在JavaScript后台线程上,因此,如果它们也来自其他线程,则您需要同步它们的读/写操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

android webview.loadUrl无法加载其他网页

来自分类Dev

在webview中加载网页(android)

来自分类Dev

Android WebView LoadURL慢

来自分类Dev

Android WebView无法正确加载

来自分类Dev

如何在Android的WebView上加载网页?

来自分类Dev

Android WebView loadUrl并添加脚本

来自分类Dev

Android Webview在loadUrl方法中加载多个Java脚本函数

来自分类Dev

Android Webview在loadUrl方法中加载多个Java脚本函数

来自分类Dev

Android WebView未加载

来自分类Dev

在Android中的对话框中加载Webview时获取android.webkit.WebView.loadUrl无效?

来自分类Dev

在Android的对话框中加载Webview时获取android.webkit.WebView.loadUrl无效?

来自分类Dev

无法创建WebView Android

来自分类Dev

Android WebView无法加载移动网站

来自分类Dev

Android WebView无法加载本地HTML文件

来自分类Dev

Webview android无法加载HTML5

来自分类Dev

Android WebView无法加载本地HTML文件

来自分类Dev

Android Webview无法在2.3.6版上加载

来自分类Dev

Android WebView无法加载URL,错误-400

来自分类Dev

Android WebView无法加载HTML文本

来自分类Dev

Android Webview不会加载我的URL,但会加载其他URL

来自分类Dev

WebView.loadUrl()中的Android JS

来自分类Dev

Android WebView loadURL崩溃的应用程序?

来自分类Dev

WebView.loadUrl()中的Android JS

来自分类Dev

Android WebView loadURL崩溃的应用程序?

来自分类Dev

从Android Webview加载JavaScript方法

来自分类Dev

想要在webview android中完成URL加载后将webview重定向到其他意图

来自分类Dev

想要在webview android中完成URL加载后将webview重定向到其他意图

来自分类Dev

在Android Webview加载网页之前如何修改页面源代码?

来自分类Dev

Android Webview加载URL不适用于Instagram网页

Related 相关文章

  1. 1

    android webview.loadUrl无法加载其他网页

  2. 2

    在webview中加载网页(android)

  3. 3

    Android WebView LoadURL慢

  4. 4

    Android WebView无法正确加载

  5. 5

    如何在Android的WebView上加载网页?

  6. 6

    Android WebView loadUrl并添加脚本

  7. 7

    Android Webview在loadUrl方法中加载多个Java脚本函数

  8. 8

    Android Webview在loadUrl方法中加载多个Java脚本函数

  9. 9

    Android WebView未加载

  10. 10

    在Android中的对话框中加载Webview时获取android.webkit.WebView.loadUrl无效?

  11. 11

    在Android的对话框中加载Webview时获取android.webkit.WebView.loadUrl无效?

  12. 12

    无法创建WebView Android

  13. 13

    Android WebView无法加载移动网站

  14. 14

    Android WebView无法加载本地HTML文件

  15. 15

    Webview android无法加载HTML5

  16. 16

    Android WebView无法加载本地HTML文件

  17. 17

    Android Webview无法在2.3.6版上加载

  18. 18

    Android WebView无法加载URL,错误-400

  19. 19

    Android WebView无法加载HTML文本

  20. 20

    Android Webview不会加载我的URL,但会加载其他URL

  21. 21

    WebView.loadUrl()中的Android JS

  22. 22

    Android WebView loadURL崩溃的应用程序?

  23. 23

    WebView.loadUrl()中的Android JS

  24. 24

    Android WebView loadURL崩溃的应用程序?

  25. 25

    从Android Webview加载JavaScript方法

  26. 26

    想要在webview android中完成URL加载后将webview重定向到其他意图

  27. 27

    想要在webview android中完成URL加载后将webview重定向到其他意图

  28. 28

    在Android Webview加载网页之前如何修改页面源代码?

  29. 29

    Android Webview加载URL不适用于Instagram网页

热门标签

归档