WebView无法持续工作

时间:2017-03-08 21:09:22

标签: android webview

编辑:复制loadUrl()

时奇怪的是

我正在使用WebViews从网页收集数据。有时候,webview什么都不做。我尝试了许多建议,但实际上,它们都没有用......

奇怪:webview.loadUrl("url...")无法正常工作,但只要我两次打电话,就可以了......

checkLogin()

void checkLogin(final Context context) {

    Log.d("checkLogin()", "Begin of checkLogin()");

    WebView webview = returnNewWebView(context, false);
    webview.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {

            Log.d("url", url);

            // GOOGLE.COM ACTUALLY WORKS!

            if(url.equals("https://www.google.com/"))
                return;

            Log.d("checkLogin()", "Loading of checkpage finished");

            if(url.contains("loginto.php")) {

                Log.d("checkLogin()", "User is logged out");

                OnLoginCheckListener.onLoginCheckLoggedOut();

            } else {

                Log.d("checkLogin()", "User is logged in");

                OnLoginCheckListener.onLoginCheckLoggedIn();
            }

        }
    });


    String id = sharedPref.getString("id", null);
    String transid = sharedPref.getString("transid", null);

    if(TextUtils.isEmpty("id") || TextUtils.isEmpty("transid")) {
        Log.d("checkLogin()", "No login found, starting LoginActivity()");
        Intent myIntent = new Intent(context, LoginActivity.class);
        context.startActivity(myIntent);
    } else {
        Log.d("checkLogin()", "Probably logged in, checking by loading startpage");
        webview.loadUrl("https://www.google.com");
         // google actually works -.-
        webview.loadUrl("https://my.login-page.com/index.php?pageid=1&id=" + id + "&transid=" + transid);
    }

}

returnNewWebView()

私有WebView returnNewWebView(Context context,Boolean JSInterface){

    // Prepare a webview

    WebView WebView = new WebView(context);

    if(JSInterface) {
        WebView.getSettings().setJavaScriptEnabled(true);
        WebView.addJavascriptInterface(new JavaScriptInterface(), "AndroidInterface");
    }

    // We don't need images for data scraping...

    WebView.getSettings().setLoadsImagesAutomatically(false);

    WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

    // Allow cookies

    CookieManager.getInstance().acceptCookie();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        CookieManager.getInstance().acceptThirdPartyCookies(WebView);
    }

    // Prevent webview not loading
    // or try it...

    WebView.clearCache(true);
    WebView.destroyDrawingCache();

    return WebView;
}

如你所见,我已经尝试了一些东西以防止它,但它仍然无法正常工作。在这种情况下,我很快就会将loadUrl() / postUrl()放两次,它就可以了。

我能做些什么,它适用于每一个案例?

我会很感激任何提示! 非常感谢您提前

logcat(未过滤)

我实际上看到了这条消息..

03-09 07:36:19.061 4111-24251/? E/ctxmgr: [ProducerActiveIntervalImpl]closeActiveInterval: Error: ongoing, trying to close

和这一个:

03-09 07:36:28.864 29862-3249/? E/accs.GcmPush: initializeApp occur error!
                                                java.lang.IllegalStateException: FirebaseApp name [DEFAULT] already exists!
                                                    at iv.a(Unknown Source)
                                                    at com.google.firebase.FirebaseApp.a(Unknown Source)
                                                    at com.google.firebase.FirebaseApp.a(Unknown Source)
                                                    at org.android.agoo.gcm.GcmRegister$1.run(GcmRegister.java:32)

也是这个:

E/libEGL: validate_display:99 error 3008 (EGL_BAD_DISPLAY)

但我无法告诉你他们是否被应用程序解雇了......

2 个答案:

答案 0 :(得分:1)

我已经完成了很长时间的完整代码,并指出了这一点:

你正在使用它 -

webview.loadUrl("https://www.google.com");
     // google actually works -.-
webview.loadUrl("https://my.login-page.com/index.php?pageid=1&id=" + id + "&transid=" + transid);

在您的 checkLogin()方法中,这是完全错误的,因为一个webview无法同时显示两个网址(正如您提到的那样,您希望实现这一点)。

现在根据您的代码,第二个网址会覆盖第一个网址的加载。

为了在同一webview中加载两个URL,尝试使用以下方法实现:

  

线程或一些sessionTimeout方法。

您可以使用okhttp包来实现此目的。 希望这有帮助!

答案 1 :(得分:0)

网页加载完成后会调用

onPageFinished,但页面上的所有javascript运行完毕后都不会调用postDelayed()。根据页面正在做什么以及您要实现的目标,可能是您的代码有时会被执行之前在该页面上执行一些基本的javascript。

这不是一个漂亮的解决方案,但尝试添加一些延迟(如Handler' s SystemClock.sleep()/var/lib/cloud/instance/userdata.txt - 但绝不会在UI线程上!)到您的代码中查看如果这确实是你的问题。