扩展ParseUser的应用程序类

时间:2015-07-04 15:14:18

标签: java android serialization parse-platform singleton

我想扩展我的Application课程,以全局访问已登录的ParseUser,而无需重复调用.getCurrentUser()并在每项活动中访问该字段。

目前我的Application类已经扩展为初始化Parse和ParseFacebookUtils。根据{{​​3}},它表示要在ParseUser课程中创建Application的实例,但我不知道该怎么做。

注意:我不想使用意图,因为ParseUser不可序列化。

感谢您的帮助。我无法看到代码包含的相关性,但请询问您是否需要。

3 个答案:

答案 0 :(得分:0)

方法ParseUser.getCurrentUser()不会执行任何网络操作,因此无法阻止用户界面。它也是静态的,所以通过某种方式它已经为你提供了全局访问。

我认为在某处复制它的价值不是最好的主意,它可能会导致错误

答案 1 :(得分:0)

您可以做的是在现有应用程序类中有2个属性。

  1. isLoggedIn(boolean) - 将其初始化为false
  2. 用户(ParseUser)
  3. 放置吸气剂和制定者。

    当用户登录系统时,您可以将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;