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