【问题标题】:Saving user information in app settings在应用设置中保存用户信息
【发布时间】:2012-04-18 12:55:26
【问题描述】:

我正在我的应用程序中创建登录。用户输入他的信息,我将其发送到网络服务以检查并获取他的 ID。现在我需要将它保存在我的应用程序中的某个地方,我可以检查他是否已经登录。

那么这些信息应该保存在哪里?我知道每个应用程序都有它的设置,所以应该有这个信息?也许有人可以给我更多信息这是什么以及如何做。

谢谢。

我发现了这个帖子: What is the most appropriate way to store user settings in Android application

我相信我的问题是重复的。但是如果你有更多的东西可以分享,那就太好了。

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以为此使用SharedPreferences

    来自参考的一些代码(taken from documentation):

    public class Calc extends Activity {
        public static final String PREFS_NAME = "MyPrefsFile";
    
        @Override
        protected void onCreate(Bundle state){
           super.onCreate(state);
           . . .
    
           // Restore preferences
           SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
           boolean silent = settings.getBoolean("silentMode", false);
           setSilent(silent);
        }
    
        @Override
        protected void onStop(){
           super.onStop();
    
          // We need an Editor object to make preference changes.
          // All objects are from android.context.Context
          SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
          SharedPreferences.Editor editor = settings.edit();
          editor.putBoolean("silentMode", mSilentMode);
    
          // Commit the edits!
          editor.commit();
        }
    }
    

    【讨论】:

      【解决方案2】:

      答案是使用应用程序类或共享首选项

      我假设您可以轻松搜索 Application ClassSharedPreferencesSQLite Database 的示例

      所以我要提到 我在哪里使用哪些选项

      Application Class

      当我有任何东西(var、array、list、objects)只为应用程序的生命周期存储时。当它接近时(对于 Android 强制关闭),我使用应用程序类。

      SharedPreferences

      当我得到一些简短的信息(如 id、token、用户名、标志)时,我会使用它,只要应用程序在设备中,我就想存储它......并且每次启动应用程序时都需要使用这些信息。

      SQLite Database

      当有大量记录格式(行-列)的数据时,我用它来存储在数据库中,以便存储、检索和操作。

      【讨论】:

        【解决方案3】:

        首先使用此代码在 SharedPreferences 中保存用户信息,例如 uname 和密码。

        SharedPreferences settings = getSharedPreferences("UserInfo", 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString("Username",txtUname.getText().toString());
        editor.putString("Password",txtPWD.getText().toString());
        editor.commit();
        

        然后从下面的代码中获取 SharedPreferences

        SharedPreferences settings = getSharedPreferences("UserInfo", 0);
        txtUname.setText(settings.getString("Username", "").toString());
        txtPWD.setText(settings.getString("Password", "").toString());
        

        【讨论】:

        • 对于任何想知道兼容性的人,所有当前 API 版本都支持此功能(在 API V1 中添加)。 SharedPreferences 文档可以在这里找到:developer.android.com/reference/android/content/…
        • 对于任何想了解安全性的人,请不要将用户密码存储在 SharedPreferences 中。
        • 你不应该在应用程序或数据库中保存纯密码。您可以散列它,而不是保存纯文本。当您需要验证给定的用户密码时,您可以以相同的方式对其进行哈希处理并比较哈希值。这种方式比纯文本好很多。
        • 我可以从 App 内的任何 Activity 中获取它吗?
        • @GuiDupas 是的。这在应用程序中可用。
        【解决方案4】:

        如果用户从设置中清除应用程序数据 -> 应用程序管理器 -> 您的应用程序 -> 清除数据

        那么保存在共享首选项中的所有数据都将被删除

        【讨论】:

        • 哦,真的吗?哇,感谢您指出这一点。我想知道这是否也适用于 SQLite 数据库
        • 是的,已确认,数据库也被擦除了。确认对话框告诉我所有“文件、设置、帐户、数据库等”都将被永久删除。每天学习新东西...
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        相关资源
        最近更新 更多