【发布时间】:2015-12-31 04:19:53
【问题描述】:
我对@987654324@ 有一个问题,一个链接只是在WebView 中加载,但它不起作用。
相同的URL 在 Android 操作系统的 4.1、4.2、4.2.2 和 4.3 版本中运行良好,但在 4.4 及更高版本中无法运行。
Url 是 http://rise.esprit-apps.com/faqs/mobilefaq
这意味着它在 Kitkat、Lollipop 或 Marshmallow 中不起作用。
我认为是 cookie 问题,但我在 WebView 中启用了 cookie 但无法解决。
相同的URL 在 Chrome 和其他浏览器中完美运行,但默认 WebView 没有加载。
如果有人有解决方案,请告诉我。
这是我的代码:
package com.avm.ui;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebSettings;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebSettings.RenderPriority;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.avm.uc.CustAnimatedActivity;
import com.avm.uc.CustomProgressBarDialog;
import com.avm.uc.Header;
import com.avm.util.Config;
import com.avm.util.Pref;
import com.avm.util.Utils;
import com.esp.therisemethod.R;
public class EvaluateYourSelfEsteemActivity extends CustAnimatedActivity {
/* Declaration of variable here */
private Header header;
private WebView webView;
private CustomProgressBarDialog mProgressDialog;
private int flag;
private DefaultHttpClient httpClient;
public static Cookie cookie = null;
// Flag 1=for EvaluateYourSelfEsteem
// Flag 2=for Faq
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_common_webview);
flag = getIntent().getIntExtra("FLAG", 0);
Utils.addActivities(EvaluateYourSelfEsteemActivity.this);
/* fetch object resource here */
header = (Header) findViewById(R.id.header);
/* setValue in Header */
if (flag == 1) {
header.txtTitle.setText(getResources().getString(
R.string.RATE_YOUR_SELF_ESTEEM));
} else if (flag == 2) {
header.txtTitle.setText(getResources().getString(R.string.FAQs));
} else if (flag == 3) {
header.txtTitle.setText(getResources().getString(
R.string.PREMIUM_ACCOUNT));
}
webView = (WebView) findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient());
webView.clearHistory();
webView.clearView();
WebSettings settings = webView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccess(true);
settings.setLoadWithOverviewMode(true);
settings.setPluginState(PluginState.ON);
settings.setRenderPriority(RenderPriority.HIGH);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
settings.setDomStorageEnabled(true);
settings.setAllowUniversalAccessFromFileURLs(true);
settings.setDisplayZoomControls(false);
settings.setUseWideViewPort(false);
if (Build.VERSION.SDK_INT >= 21) {
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
cookieManager.setAcceptThirdPartyCookies(webView, true);
cookieManager.setAcceptCookie(true);
settings.setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);
}
webView.setBackgroundColor(Color.TRANSPARENT);
if (Utils.isTablet(EvaluateYourSelfEsteemActivity.this))
settings.setTextSize(WebSettings.TextSize.LARGER);
else
settings.setTextSize(WebSettings.TextSize.NORMAL);
/** set background layer */
if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
}
if (flag == 1) {
webView.loadUrl("http://www.riseselfesteem.com/test/");
} else if (flag == 2) {
webView.loadUrl("http://192.168.1.42/work/rise/faqs/mobilefaq");
// webView.loadUrl("http://rise.esprit-apps.com/faqs/mobilefaq");
} else if (flag == 3) {
webView.loadUrl("http://192.168.1.42/work/rise/payments/mobilepay/"
+ Pref.getValue(EvaluateYourSelfEsteemActivity.this,
Config.PREF_USERID, "0"));
}
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
if (mProgressDialog == null) {
mProgressDialog = new CustomProgressBarDialog(
EvaluateYourSelfEsteemActivity.this);
mProgressDialog.setCancelable(true);
mProgressDialog.show();
}
}
// load URL
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals("http://www.riseselfesteem.com/video")) {
view.stopLoading();
startAnimatedActivity(new Intent(
EvaluateYourSelfEsteemActivity.this,
AboutUsActivity.class),
CustAnimatedActivity.SLIDE_FROM_RIGHT);
return false;
} else if (url
.equals("http://192.168.1.42/work/rise/contact?mobilecontact")) {
view.stopLoading();
startAnimatedActivity(new Intent(
EvaluateYourSelfEsteemActivity.this,
ContectUsActivity.class),
CustAnimatedActivity.SLIDE_FROM_RIGHT);
return false;
} else if (url.equals("http://paymentfail/")) {
view.stopLoading();
finish();
overridePendingTransition(
R.anim.animated_activity_slide_left_in,
R.anim.animated_activity_slide_right_out);
return false;
} else if (url.equals("http://paymentdone/")) {
view.stopLoading();
Pref.setValue(EvaluateYourSelfEsteemActivity.this,
Config.PREF_IS_PAID, "1");
startAnimatedActivity(new Intent(
EvaluateYourSelfEsteemActivity.this,
PremiumAccountSucessActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT),
CustAnimatedActivity.SLIDE_FROM_RIGHT);
finish();
return false;
} else {
view.loadUrl(url);
return true;
}
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.cancel();
mProgressDialog = null;
}
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.cancel();
mProgressDialog = null;
}
}
});
super.onCreate(savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save the state of the WebView
webView.saveState(outState);
}
// onRestoreInstanceState to restore the instance
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Restore the state of the WebView
webView.restoreState(savedInstanceState);
}
@SuppressWarnings("deprecation")
@Override
public void onDestroy() {
try {
webView.clearView();
} catch (Exception e) {
e.printStackTrace();
}
super.onDestroy();
}
@Override
protected void onPause() {
if (mProgressDialog != null && mProgressDialog.isShowing())
mProgressDialog.dismiss();
mProgressDialog = null;
super.onPause();
}
@Override
public void onBackPressed() {
if (mProgressDialog != null && mProgressDialog.isShowing())
mProgressDialog.dismiss();
mProgressDialog = null;
super.onBackPressed();
}
}
我在 logcat 中遇到以下错误:
12-31 10:29:11.223: I/art(11886): Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.FloatingSelectActionModeCallback>
12-31 10:29:11.228: I/art(11886): Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.FloatingSelectActionModeCallback>
12-31 10:29:11.246: I/art(11886): Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.WebViewContentsClientAdapter$WebResourceErrorImpl>
12-31 10:29:11.247: I/art(11886): Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.WebViewContentsClientAdapter$WebResourceErrorImpl>
谢谢。
【问题讨论】:
-
除非您发布代码,否则我们不能假设出了什么问题。除非您告诉我们什么中断以及调试停止的确切位置,否则我们无法知道出了什么问题。信息这么少,这里没人能帮到你。
-
@AndiGeeky 等一下,我会附上代码,否则你会给我在 Kitkat、Lollipop、Marshmallow 中加载到 URL 上方的演示项目
-
@Dhaval Shah:你用过吗? -> developer.android.com/reference/android/webkit/WebView.html
-
@DhavalShah : 请同时检查 -> developer.android.com/about/versions/lollipop.html
标签: android cookies webview android-webview