为 ParseUser 扩展应用程序 Class

Extend Application Class for ParseUser

我想扩展我的 Application class 以便全局访问登录的 ParseUser 而无需重复调用 .getCurrentUser() 并访问它在每个 activity.

目前我的 Application class 已经扩展到初始化 Parse 和 ParseFacebookUtils。根据 this thread,它说要在 Application class 中创建 ParseUser 的实例,但我不确定该怎么做。

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

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

方法 ParseUser.getCurrentUser() 不执行任何网络操作,因此无法阻止 UI。它也是静态的,因此通过某种方式它已经为您提供了全局访问权限。

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

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

  1. isLoggedIn(boolean) - 将其初始化为 false
  2. 用户(解析用户)

并放置 getter 和 setter。

当用户登录系统时,您可以将 isLoggedIn 设置为 true 并在 loginActivity 中也设置用户。假设扩展应用程序 class 是 MyApplication。

((MyApplication)getApplication).setIsLoggedIn(true) ((MyApplication)getApplication).setUser(parseUser).

之后您可以在其他活动中简单地检查 isLoggedIn 布尔值并执行必要的操作。

您可以通过以下方式检索设置的用户 ParseUser currentUser = ((MyApplication)getApplication).getUser()

希望对您有所帮助。

我已经实现了单例来解决我的问题。我已经扩展了应用程序 class 来初始化一个单例,这样无论 activity 是否被销毁,这个单例的实例都存在。我可以通过任何 activity 访问此实例,因此可以访问当前 ParseUser 的所有字段。

// 申请Class

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();
    }
}

// 单例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
    }
}

// Activity访问

ParseUserSingleton.getInstance().customSingletonMethod();
userHashMap = ParseUserSingleton.getInstance().userFields;