Java 登录&;改装签到
我在我的计算机上创建了一个带有JSON数据库的简单localhost API。我已经实现了主机可以创建新配置文件或登录现有配置文件的功能Java 登录&;改装签到,java,android,json,authorization,retrofit,Java,Android,Json,Authorization,Retrofit,我在我的计算机上创建了一个带有JSON数据库的简单localhost API。我已经实现了主机可以创建新配置文件或登录现有配置文件的功能 "hosts": [ { "id": 1, "login": "drey95music", "password": "8526000Qq", "email": "shtandrinity@gmail.com", "eventName": "FDC Open Mic", "latit
"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请求,那么将该令牌存储在
SharedReferences
中可能是一个好主意。这样就可以从应用程序中的任何地方访问它,并且这个存储是持久的——也就是说,即使你关闭应用程序并重新打开它,它在持久内存中说
也就是说,如果您必须存储大量信息,我建议将这些信息存储在SQLite
数据库中<代码>共享引用不建议用于存储大量数据
我希望这有帮助 开发人员通常使用共享首选项来存储特定键的某些值。我制作了一个通用的共享偏好类,并毫不犹豫地在每个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);
共享首选项仅存储字符串、布尔值、长值、浮点值和整数。如果您想在共享首选项中存储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"));
您也可以将您的列表存储在共享首选项中。谢谢您的回答。我刚刚添加了API模型,以便您可以看到它。我只是在谷歌上搜索了一个令牌认证。看来我得改变我的API了。你能确认一下吗?我不知道你想让我确认什么,但是,如果你计划实施基于令牌的身份验证,那就去吧。但这实际上取决于您的用例。如果信息是公开的,那么每个人都可以访问它。在这种情况下,您不必设置身份验证机制。如果这是私有的,那么当然,您需要实现一个身份验证机制。根据您的数据模型,看起来您应该使用数据库
SharedReferences
不适合放置主机和艺术家的列表。我举了一个例子,用于Android中的基本数据库实现-我想在SharedReferences中只存储令牌和ID。所以在检查了这两个之后,我就可以使用JSON对象了。