在android中保存数据的位置

时间:2017-04-16 13:25:16

标签: android storage settings

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

2 个答案:

答案 0 :(得分:0)

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);

答案 1 :(得分:0)

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