从SharedPreference

时间:2016-01-02 20:30:38

标签: java android httpcookie android-sharedpreferences android-cookiemanager

我在启动时在cookie管理器上添加cookie时遇到问题。

我想要解决的问题是 - 在登录响应期间在Sharedprefrence中添加cookie以及应用程序被终止或退出时,检索该cookie并添加到我的cookie存储区,以便Main活动将read命令发送到服务器和服务器将看到cookie并知道用户已经登录。

我面临的当前问题是 - 在登录期间,我可以将cookie保存到共享的prefrence。 当应用程序被杀死并重新启动时,我从共享的prefrence获取cookie字符串,但是当我将它添加到我的cookiemanager时 - 它仍然需要我登录屏幕。此外,当我在日志中打印Sharedprefrence之后,我看到URI为null,而在应用程序中 - 当我设置cookie时 - 我看到我的URI与cookie获取域值相匹配(不确定它是否与此类似或不)

流程是 Mainactivity向服务器发送读命令,如果服务器发现没有cookie且用户未登录,则发送状态0;否则1。 如果status为0,那么我将转到登录活动,否则转到主屏幕活动。 这很好但只有当应用程序被杀死时,因为cookie被删除,它需要我登录屏幕。

以下是代码: -

我的主要活动/登录活动和主屏幕活动 - 使用Async任务调用一个用于httpconnection的类 - 它写入共享首选项。

在doInbackground中: -

 URL url = new URL(params[0]);

                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();

                List<HttpCookie> cookies = ((CookieManager)CookieHandler.getDefault()).getCookieStore().getCookies();
                if (cookies.isEmpty()) {
                    Log.d("LOG_TAG","no cookies received");
                } else {
                    for (int i = 0; i < cookies.size(); i++) {

                        Context context1 = application.getContext();
                        SharedPreferences sharedPreferences = context1.getSharedPreferences("Myprefs", Context.MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        editor.putString("cookie",cookies.get(i).toString());
                        editor.putString("URI",cookiedomain);
                        editor.commit();


                    }

            }

申请类 -

public class application extends Application {
    private static Context context;
    @Override
    public void onCreate() {
        super.onCreate();
            CookieManager cookieManager = new CookieManager();
            CookieHandler.setDefault(cookieManager);

            application.context = getApplicationContext();
        SharedPreferences settings = getSharedPreferences("Myprefs", 0);
        String silent = settings.getString("cookie", null);
        String uri = settings.getString("URI",null);
        if (silent != null) {
            if (uri != null) {
                HttpCookie httpcookie = new HttpCookie("user", silent);
             URI myuri = URI.create(uri);
                cookieManager.getCookieStore().add(myuri,httpcookie);
            }
        }
    }

    public static Context getContext() {
        return application.context;
    }

如果有人可以帮助我,我们将不胜感激。我真的在这里打破了我的头脑。

1 个答案:

答案 0 :(得分:1)

通过从Sharedprefrence加载Cookie并在每次应用程序被杀死并再次打开时添加到Cookiemanager来解决此问题。