一旦用户登录,我应该使用类实例(序列化)还是 Singleton 来存储 userInfo

Posted

技术标签:

【中文标题】一旦用户登录,我应该使用类实例(序列化)还是 Singleton 来存储 userInfo【英文标题】:Should I use class instance(serialized) or Singleton for storing userInfo once the user login 【发布时间】:2017-12-25 21:10:29 【问题描述】:

我想知道在用户登录后存储用户信息的更好方法是什么。我应该将数据解析为 Serizaled 对象类吗?或者我应该创建一个单身人士。大多数情况下,一旦我登录,我就会从服务器收到大约 12-13 个对象,但是其中 2-3 个在整个应用程序中都被使用,其他的不是很常见。

【问题讨论】:

将该信息存储在请求会话中,以便用户随时可以再次访问 我所做的是将整个响应存储在 SharedPrefences 中,一旦我打开应用程序,如果用户不为 null 到使用 Gson 的可序列化类,我会解析这些数据。我已经创建了一个基类,它继承了所有具有名为 getUser 和 User Obect 的方法(序列化类)的类,并且每当我需要获取用户名、id 或其他内容时。例如,我调用类 getUser().getUserId。这是个好方法吗? 你可以存储完整的对象而不需要用 Gson 序列化/反序列化,但这不是一个糟糕的解决方案 嗯,好吧,但不会序列化类中的数据,这样可以更快地检索例如; userId 而不是调用整个响应然后 getJsonObject(userId) 它只是调用 getUserId?而且它会让我在基础中拥有更少的方法,所有 userInfo 方法都将在用户类中 啊,好吧,如果您将 java 对象存储在会话中或 sharedPreferences 可以,我会误会您 【参考方案1】:

您有多种选择。在这里阅读:https://developer.android.com/guide/topics/data/data-storage.html

在你的情况下,也许你可以简单地使用 SharedPreferences,这里:https://developer.android.com/guide/topics/data/data-storage.html#pref

    SharedPreferences sharedPreferences = context.getSharedPreferences("FILE_NAME",
            Context.MODE_PRIVATE);

放置值: (如果您关心 putString 是否成功,请使用 .commit() 而不是 .apply())

    SharedPreferences sharedPreferences = context.getSharedPreferences(COOKIE_SP_FILE_NAME,
            Context.MODE_PRIVATE);
    if (sharedPreferences != null) 
        sharedPreferences.edit().putString("KEY", "VALUE").apply();
    

要检索值:

    SharedPreferences sharedPreferences = context.getSharedPreferences("FILE_NAME", Context.MODE_PRIVATE);
    if (sharedPreferences != null) 
        String theString = sharedPreferences.getString("KEY", "DEFAULT_VALUE");
    

如果没有找到以“KEY”为键的值,则“DEFAULT_VALUE”是您将获得的值。

【讨论】:

我所做的是将整个响应存储在 SharedPrefences 中,一旦我打开应用程序,如果用户不为 null 到使用 Gson 的可序列化类,我会解析这些数据。我已经创建了一个基类,它继承了所有具有名为 getUser 和 User Obect 的方法(序列化类)的类,并且每当我需要获取用户名、id 或其他内容时。例如,我调用类 getUser().getUserId。这是个好方法吗? 我的意思是,当然,尝试在应用程序本身中尽可能少地存储,然后创建一个 RESTful api,然后您基本上只需要存储令牌。而且,您存储的信息越少,您的应用程序可以拥有的声明越少,测试就越容易。

以上是关于一旦用户登录,我应该使用类实例(序列化)还是 Singleton 来存储 userInfo的主要内容,如果未能解决你的问题,请参考以下文章

模型类(在 MVC 中)应该使用静态方法还是实例方法?

内部类方法应该返回值还是只修改实例变量?

程序化joomla用户创建与登录显示冲突

一旦分配给会话类的属性,就无法检索会话值[关闭]

将 BLL 类标记为静态或?

oracle sys 权限不足