我想扩展我的Application
课程,以全局访问已登录的ParseUser
,而无需重复调用.getCurrentUser()
并在每项活动中访问该字段。
目前我的Application
类已经扩展为初始化Parse和ParseFacebookUtils。根据{{3}},它表示要在ParseUser
课程中创建Application
的实例,但我不知道该怎么做。
注意:我不想使用意图,因为ParseUser不可序列化。
感谢您的帮助。我无法看到代码包含的相关性,但请询问您是否需要。
答案 0 :(得分:0)
方法ParseUser.getCurrentUser()
不会执行任何网络操作,因此无法阻止用户界面。它也是静态的,所以通过某种方式它已经为你提供了全局访问。
我认为在某处复制它的价值不是最好的主意,它可能会导致错误
答案 1 :(得分:0)
您可以做的是在现有应用程序类中有2个属性。
放置吸气剂和制定者。
当用户登录系统时,您可以将isLoggedIn设置为true,并在loginActivity中设置用户。假设扩展的Application类是MyApplication。
((MyApplication)getApplication).setIsLoggedIn(true)
((MyApplication)getApplication).setUser(parseUser)
。
之后,您可以在其他活动中简单地检查isLoggedIn布尔值并执行必要的操作。
您可以检索设置的用户
ParseUser currentUser = ((MyApplication)getApplication).getUser()
希望这有帮助。
答案 2 :(得分:0)
我已经实现了Singleton来解决我的问题。我已经扩展了Application类来初始化Singleton,因此无论活动是被销毁还是其他方式,都存在此Singleton的实例。我可以通过任何活动访问此实例,并访问当前ParseUser的所有字段。
// 应用程序类
public class Application extends android.app.Application{
@Override
public void onCreate() {
Parse.initialize(this, "redacted", "redacted");
ParseFacebookUtils.initialize(this);
initSingleton();
}
protected void initSingleton() {
ParseUserSingleton.initInstance();
}
}
// Singleton Class
public class ParseUserSingleton {
private static ParseUserSingleton instance;
public ParseUser user;
public HashMap<String, String> userFields = new HashMap<>();
public static void initInstance() {
if (instance == null) {
// Create the instance
instance = new ParseUserSingleton();
}
}
public static ParseUserSingleton getInstance() {
// Return the instance
return instance;
}
private ParseUserSingleton() {
// Constructor hidden because this is a singleton
}
public void customSingletonMethod() {
try {
user = ParseUser.getCurrentUser().fetch();
} catch (ParseException e) {
e.printStackTrace();
}
userFields.put("name", user.get("availability").toString());
// repeat for other fields
}
}
// 活动访问
ParseUserSingleton.getInstance().customSingletonMethod();
userHashMap = ParseUserSingleton.getInstance().userFields;