[英]LogIn & SignIn with Retrofit
我在我的计算机上创建了一个带有 JSON 数据库的简单 localhost API。 我已经实现了主机可以创建新配置文件或登录现有配置文件的功能。
"hosts": [
{
"id": 1,
"login": "drey95music",
"password": "8526000Qq",
"email": "shtandrinity@gmail.com",
"eventName": "FDC Open Mic",
"latitude": 41.924676,
"longitude": -87.700266
}],
"artists": [
{
"id": 1,
"name": "MDQ",
"phone": 7738375513,
"isLocated": "true",
"userId": 1
}]
我的问题是存储/记住/检查用户是否登录以便他/她拥有更多功能的最佳方式是什么?
谢谢你。
实际上,您可以根据您拥有的用例以多种不同的方式进行实现。 就个人而言,我觉得,如果用户信息非常小,或者您只需要存储一个令牌以便将其传递给后续的 API 请求,那么将该令牌存储在SharedPreferences
中可能是一个好主意。 这样就可以从应用程序中的任何位置访问它,并且此存储是持久的 - 也就是说,即使您关闭应用程序并重新打开它,它也会在持久性 memory 中表示。
话虽如此,如果您必须存储大量信息,我建议将这些信息存储在SQLite
数据库中。 不建议将SharedPreferences
用于存储大量数据。
我希望这会有所帮助!
通常开发人员使用 Shared Preference 来存储特定键的一些值行为。 我做了一个通用的共享偏好 class 并毫不犹豫地在每个 android 项目中使用它。
public class SaveInSharedPreference {
public static final String IS_LOGIN = "isLogin";
private final SharedPreferences pref;
private final SharedPreferences.Editor editor;
// shared pref mode
private final int PRIVATE_MODE = 0;
// Shared preferences file name
private static final String PREF_NAME = "PREF_NAME";
@SuppressLint("CommitPrefEdits")
public SaveInSharedPreference(Context context) {
pref = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}
public void setBoolean(String key, boolean value){
editor.putBoolean(key, value);
editor.commit();
}
public boolean getBoolean(String key) {
return pref.getBoolean(key, false);
}
public void setString(String key, String value) {
editor.putString(key, value);
editor.commit();
}
public String getString(String key) {
return pref.getString(key, "");
}
public void setInteger(String key, int value) {
editor.putInt(key, value);
editor.commit();
}
public Integer getInteger(String key) {
return pref.getInt(key, 0);
}
public void clearSavedInSharedPreference(){
editor.clear();
editor.commit();
}
}
成功验证用户身份后,使用此行通过以下方式添加/更新密钥的值:
new SaveInSharedPreference(this).setBoolean(IS_LOGIN, true);
您可以通过以下方式获取 key 的值:
new SaveInSharedPreference(this).getBoolean(IS_LOGIN);
共享首选项仅存储 String、Boolean、Long、Float、Integer。 如果您想将 JsonObject 存储在共享首选项中,您也可以这样做。 但是您必须将您的 JsonObject 更改为字符串,然后将其存储并从字符串中的共享首选项中获取值,然后将其转换为下面给出的 JsonObject:
存储/更新数据
new SaveInSharedPreference(this).setString("user_data", new Gson().toJson(put_your_model_here));
获取数据
new Gson().fromJson(new SaveInSharedPreference(this).getString("user_data"));
您还可以将列表存储在共享首选项中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.