Java 登录&;改装签到

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

我在我的计算机上创建了一个带有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请求,那么将该令牌存储在
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对象了。