【问题标题】:Where to save data in android安卓数据保存在哪里
【发布时间】:2017-09-12 06:16:29
【问题描述】:

我是 android 世界的新手,我有一个关于保存设置的问题。我将尝试用一个例子来解释它。假设我们有一个类似于 gmail 的 android 应用程序,其中用户将帐户与应用程序同步。登录名/密码存储在哪里,即使关闭手机电源,它们仍然存在?它们是否存储在 SharedPreferences 中,在单独的文件中,在数据库中?任何解释将不胜感激。

【问题讨论】:

    标签: android storage settings


    【解决方案1】:

    Google 和其他此类公司使用会话来识别用户。他们不会在您的手机中存储密码。在您第一次登录后,服务器将向用户发出一个唯一的会话 ID,应用程序可能会将其存储在 SharedPreferences 中,之后,每个连续的服务器请求也必须发送此会话 ID 以进行身份​​验证。在您的情况下,您可以很好地将任何设置存储在 SharedPreferences 中,但不建议存储密码。如果你有大量的数据需要存储,例如你正在创建一个具有各种功能的游戏,你可以使用 SQLite 数据库来存储和检索数据。

    编辑: 首先,使用 HttpUrlConnection 将用户名和密码发送到您的服务器。在此之后,我们需要从服务器响应标头中提取 cookie。 以下代码演示了如何从服务器响应中获取 cookie:

                    String[] tokens;
                    List cookies = conn.getHeaderFields().get("Set-Cookie");
                    if (cookies != null) {
                        for (int i = 0; i < cookies.size(); i++) {
                            String cookieString = (String) cookies.get(i);
                            tokens = cookieString.split(";");
                            List<String> cookieHeaders = new ArrayList<>();
                            for (String str : tokens) {
                                if (str.contains("httponly")||str.contains("HttpOnly")) {
                                    str = str.trim();
                                    cookieHeaders.add(str);
                                } else {
                                    Log.d("loginactivity","str "+str);
                                    str = str.substring(0, str.indexOf("=")).trim();
                                    cookieHeaders.add(str);
                                }
                            }
                            String token = cookieString;
                        }
                    }
    

    您可以将令牌放入共享首选项中:

    sharedPreferences.edit().putString("token", token).apply();
    

    在此之后,将 cookie 添加到对服务器的任何连续请求。

    String cookie = sharedPreferences.getString("token","");
    httpConn.setRequestProperty("Cookie",cookie);
    

    【讨论】:

    • 我还需要为我的应用提供授权功能。我绝对可以向应用程序发送会话令牌。您能否提供有关该主题的更多信息?
    【解决方案2】:

    您可以将数据保存在 SQLite 数据库中。您的应用需要访问文件系统权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-01
      • 2018-03-21
      • 2011-02-25
      • 2012-07-07
      • 2015-04-07
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多