【问题标题】:Android webview not loading session dataAndroid webview不加载会话数据
【发布时间】:2020-04-29 13:36:44
【问题描述】:

我有一个使用 webview 加载网站的 android 应用程序。在我的网站登陆页面中,我有一个表单,用户在其中输入代码编号,根据该代码编号,我将重定向到我网站的特定 URL。在我的网站上效果很好。所做的是将代码存储在与该 url 的会话中,当同一用户再次加载我的网站时,它会自动将其重定向到该页面。但是当我使用我的 android 应用程序尝试这种情况时,似乎会话数据不起作用。谁能帮帮我?

这是我的代码:

package com.myPackageName;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Message;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    WebView myweb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myweb = findViewById(R.id.myWebView);

        WebSettings myWebSettings = myweb.getSettings();
        myWebSettings.setJavaScriptEnabled(true);
        myWebSettings.setSupportMultipleWindows(true);
        myWebSettings.setBuiltInZoomControls(true);
        myweb.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        myweb.getSettings().setAppCacheEnabled(true);

        myWebSettings.setDomStorageEnabled(true);
        myWebSettings.setSavePassword(true);
        myWebSettings.setSaveFormData(true);

        myweb.setWebViewClient(new MyWebViewClient());
        myweb.setWebChromeClient(new MyWebChromeClient());

        CookieSyncManager.createInstance(this);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);

        myweb.loadUrl("https://www.mywebsite.com");

    }

    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }

    private class MyWebChromeClient extends WebChromeClient{
        @Override
        public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
            WebView newWebView = new WebView(MainActivity.this);
            view.addView(newWebView);
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(newWebView);
            //transport.getWebView();
            resultMsg.sendToTarget();
            //Toast.makeText(MainActivity.this, WebView.HitTestResult , Toast.LENGTH_LONG).show();
            return true;
        }
    }

    @Override
    public void onBackPressed () {
        if (myweb != null && myweb.canGoBack())
            myweb.goBack();// if there is previous page open it
        else
            super.onBackPressed();//if there is no previous page, close app
    }
}

【问题讨论】:

    标签: android webview


    【解决方案1】:

    我认为,您的问题在于,每次您开始活动时,webview 都不知道之前设置的 cookie。

    要解决这个问题,您可以在启动 webview 的新实例时存储您设置的 cookie,然后重新注入它们。

    关于如何获取 cookie 的参考可以在她那里找到:Reading cookies

    【讨论】:

    • 抱歉让您久等了。正如我发现的那样。上面这些代码足以存储和获取 cookie。但问题是,我必须等待 15 秒才能存储 cookie。你能帮我解决这个问题吗?
    • 当然,当您想在 Android 中定义等待时间间隔时,您必须在后台线程中进行。有很多可能获得另一个线程。最常见的一种是runnable:developer.android.com/reference/java/lang/Runnable 在runnable 中您可以轻松地等待15 秒,然后保存cookie。有很多方法(远远超出我的评论范围)来确保 cookie 被写入。我建议你看看:developer.android.com/guide/components/…
    • 我不想等待 15 秒。我想立即设置 cookie。正如我告诉你的,现在需要 15-20 秒。
    猜你喜欢
    • 2018-10-18
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    相关资源
    最近更新 更多