我知道这个问题比较频繁,但看起来无论如何我都要问它。
我正在开发一款网络游戏。该应用程序保存当前用户的帐户信息,团队信息,单位,私人消息等,以提供对它们的永久访问。我已经创建了一个包含所有这些内容的类,现在我每次都在应用启动时加载会话数据,显示启动活动。会话数据实例位于Application
类子级。
每次,在每个Activity的onCreate
和onResume
中,我都会检查会话数据是否存活,如果不存在,我会启动splash活动来重新加载它。我知道这种做法是一种不好的做法,但它看起来像是管理会话的最快方法。
最近,我开始对我的应用进行beta测试,并且在面向会话数据对象的对象中遇到了大量NPE,尽管我进行了onCreate
和onResume
检查。
有人能建议更好地解决这个问题吗?
此外,
答案 0 :(得分:1)
SharedPreferences是解决此类问题的更好方法。
下面的代码显示了一个可用于保存和获取用户数据的类
public class SharedPreferencesClass {
public static final String PREFS_NAME = "MyPrefsFile";
public static final int PRIVATE_MODE = 0;
public SharedPreferences setting;
public SharedPreferences.Editor editor;
public SharedPreferencesClass(Context context) {
setting = context.getSharedPreferences(PREFS_NAME, PRIVATE_MODE);
}
//Save user data by calling this method
public void setLoginData(String userId, String userName, String email,
String image_str, String about) {
editor = setting.edit();
editor.putBoolean("Login", true);
editor.putString("UserID", userId);
editor.putString("UserName", userName);
editor.putString("Email", email);
editor.putString("About", about);
editor.commit();
}
//An example of editing some of the user data
public void setEditedData(String email, String image_str ,String about) {
editor = setting.edit();
editor.putString("Email", email);
editor.putString("About", about);
editor.commit();
}
//this method for clearing all of the user information
public void clearPerferance() {
editor = setting.edit();
editor.clear();
editor.commit();
}
//The below methods is for getting specific data that you saved it the shared preference ...
public boolean isLogin() {
return setting.getBoolean("Login", false);
}
public String getUserName() {
return setting.getString("UserName", "");
}
public String getUserID() {
return setting.getString("UserID", "");
}
public String getEmail() {
return setting.getString("Email", "");
}
public String getAbout() {
return setting.getString("About", "");
}
}
此处还有tutorial解释并说明如何使用SharedPreferences。
答案 1 :(得分:1)
您需要将对象存储到SharedPreferences。据我所知,你不能把对象放到SharedPreferences。所以你需要做一些技巧。我认为这个解决方案对您来说已足够了:
SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);
保存
Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson("MyObject");
prefsEditor.putString("MyObject", json);
prefsEditor.commit();
要退却
Gson gson = new Gson();
String json = mPrefs.getString("MyObject", "");
MyObject obj = gson.fromJson(json, MyObject.class);
此代码来自 "this quesiton" MuhammadAamirALi
答案 2 :(得分:0)
每次都不要启动闪屏。它会降低应用程序的性能,只需创建一个加载会话数据的方法,并在会话不存在时调用它。并在应用程序的共享首选项中加载会话数据。