android 中的数据保存位置

Where to save data in android

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

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

编辑: 首先,使用 HttpUrlConnection 将用户名和密码发送到您的服务器。在此之后,我们需要从服务器响应 header 中提取 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);

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