当前位置: 首页 > 面试题库 >

如何将Cookie永久保存在Android Webview中?

颛孙镜
2023-03-14
问题内容

通过下面的代码,我已经能够保存cookie,但是一旦关闭应用程序,cookie就会消失。

这是怎么引起的,我该如何解决?

package com.jkjljkj

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.webkit.CookieSyncManager;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class Activity extends Activity {

    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        CookieSyncManager.createInstance(getBaseContext());

        // Let's display the progress in the activity title bar, like the
        // browser app does.


        getWindow().requestFeature(Window.FEATURE_PROGRESS);

        WebView webview = new WebView(this);
        setContentView(webview);


        webview.getSettings().setJavaScriptEnabled(true);

        final Activity activity = this;
        webview.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
             // Activities and WebViews measure progress with different scales.
             // The progress meter will automatically disappear when we reach 100%
             activity.setProgress(progress * 1000);
        }
      });

      webview.setWebViewClient(new WebViewClient() {

         public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
              //Users will be notified in case there's an error (i.e. no internet connection)
              Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
         }
      });

      CookieSyncManager.getInstance().startSync();
      CookieSyncManager.getInstance().sync();

     //This will load the webpage that we want to see
      webview.loadUrl("http://");

   }
}

问题答案:

您必须告诉CookieSyncManager 加载有问题的页面
进行同步。在您的示例代码中,该onCreate方法在WebView尝试加载页面之前完全执行,因此同步过程(异步发生)可能会在加载页面之前完成。

相反,告诉CookieSyncManager同步WebViewClient中的onPageFinished。那应该给您您想要的。

该CookieSyncManager文档是如何做到这一点正确良好的阅读。

您可以通过以下方法设置WebViewClient实现来为您执行此操作:

webview.setWebViewClient(new WebViewClient() {
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        //Users will be notified in case there's an error (i.e. no internet connection)
        Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
    }

    public void onPageFinished(WebView view, String url) {
        CookieSyncManager.getInstance().sync();
    }
);

您无需告诉CookieSyncManager将此同步到其他位置。我还没有测试过,所以让我知道它是否有效。



 类似资料:
  • 问题内容: 那可能吗?例如,用户将新的项目/元素添加到arraylist中(bufferedreader进程),并且肯定会发生更改。我的问题是,即使用户多次对arraylist进行更改,也可能永久关闭该列表,即使他们关闭程序并重新打开它也一直存在。 注意:不得使用.txt 很抱歉提出这样的问题,但我对此很好奇。谢谢! 问题答案: 程序停止时,将释放它使用的所有内存,包括ArrayList。除了不关

  • 我已经开始使用推荐的,并不再使用。其中一件我无法粘合的事情是使用持久的cookie存储。我只想在我的连接上附加一个定制的cookie处理程序/管理器来存储cookie。Android文档并没有太大帮助,因为它将有关cookie的主题概括为两行。 我之前一直在使用LoopJ的PersistentCookieStore,效果很好。 关于如何在Android中设置一个持久的cookie存储,我可以附加到

  • 问题内容: 我有一些登录信息,比如说用户名,登录电子邮件ID和位置。 即使在用户注销并关闭窗口后,我也希望将此信息保留在浏览器中。 这样,当用户在注销或会话期满后返回时,Web应用程序将填写客户端用户名,并要求用户输入密码。 我要求的最好的例子是Google登录。! 目前,我只使用会话,不使用cookie。 有什么可能的解决方案? 问题答案: LocalStorage被认为是在浏览器中永久存储值的

  • 问题内容: 我想将HtmlUnit cookie保存到一个文件,然后在下一次运行时从该文件中加载它们。我怎样才能做到这一点?谢谢。 问题答案:

  • 问题内容: 我对 SQLite3 和 Python 3 做错了。也许我误解了SQLite数据库的概念,但是我希望即使关闭应用程序后,数据仍存储在数据库中?当我插入数据并重新打开应用程序时,插入物消失了,数据库为空。 这是我的小数据库: 我在哪里做错了? 问题答案: 调用以将事务刷新到磁盘。 程序退出时,最后一个未完成的事务将回滚到最后一个提交。(或更准确地说,回滚是由下一个打开数据库的程序完成的。

  • 问题内容: 我对Java堆内存有一个问题。我用Java开发了一个客户端服务器应用程序,该应用程序作为Windows服务运行,需要超过512MB的内存。我有2GB的RAM,但是运行应用程序时会引发异常 内存不足错误:java堆空间 但是我已经在Java控制面板中设置了堆大小(最大512MB),但仍然收到相同的错误。我无法通过命令行设置堆大小,因为我的应用程序作为Windows服务运行,因此如何增加默