【问题标题】:WebView not loading url in Android 4.4+WebView 未在 Android 4.4+ 中加载 url
【发布时间】:2015-12-31 04:19:53
【问题描述】:

我对@9​​87654324@ 有一个问题,一个链接只是在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 上方的演示项目
  • @DhavalShah : 请同时检查 -> developer.android.com/about/versions/lollipop.html

标签: android cookies webview android-webview


【解决方案1】:

请勾选Migrating to WebView in Android 4.4

Android 4.4(API 级别 19)引入了基于 Chromium 的新版 WebView。此更改升级了对 HTML5、CSS3 和 JavaScript 的 WebView 性能和标准支持,以匹配最新的 Web 浏览器。在 Android 4.4 及更高版本上运行时,任何使用 WebView 的应用都将继承这些升级。

参考链接:http://developer.android.com/guide/webapps/migrating.html

希望对你有所帮助。

【讨论】:

  • 你能给我提供在 android webview 中的 url 上方并使用 4.4+ 版本的示例项目吗?
【解决方案2】:

试试这个代码:

CookieManager cm = CookieManager.getInstance();
cm.setAcceptCookie(true);

它应该在创建 WebView 之前执行。

【讨论】:

  • 不工作它给出了同样的错误我目前正在检查 nexus 7 Android 版本 5.1.1 我已经给出了我想要加载的示例 url 请检查我的问题
猜你喜欢
  • 2013-04-18
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2016-12-10
  • 2014-04-02
  • 1970-01-01
相关资源
最近更新 更多