loadUrl()
行我正在使用WebViews从网页收集数据。有时候,webview什么都不做。我尝试了许多建议,但实际上,它们都没有用......
奇怪:webview.loadUrl("url...")
无法正常工作,但只要我两次打电话,就可以了......
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);
}
}
私有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)
但我无法告诉你他们是否被应用程序解雇了......
答案 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线程上!)到您的代码中查看如果这确实是你的问题。