Session.openActiveSessionFromCache抛出NullPointerException

时间:2013-05-31 23:40:10

标签: android facebook authentication

我的Facebook应用程序有不同的应用程序ID,基于构建所针对的生产/测试环境。因此,我在代码中而不是在清单中设置ApplicationId。

第一次启动应用程序时,Session.openActiveSessionFromCache会抛出NullPointerException(“Argument'applicationId'不能为null”)。我捕获错误并继续使用SessionBuilder和用户登录创建会话,批准权限等。

然而,在应用程序的所有后续启动中,Session.openActiveSessionFromCache继续抛出NullPointerException。我希望它能在所有后续启动时以静默方式登录用户。当ApplicationId在代码而不是元数据中设置时,为什么我不能访问缓存会话?

//in MyActivity.onStart()
Session session = null;
if (BuildConfig.DEBUG == true) {
    MY_FACEBOOK_APP_ID = "my debug applicationId";
} else {
    MY_FACEBOOK_APP_ID = "my release applicationId";
}

try {
    session = Session.openActiveSessionFromCache(getApplicationContext());
} catch (NullPointerException e) {
    Log.e(TAG, e.getMessage());
}
if (session == null) {
    session = new Session.Builder(getApplicationContext())
        .setApplicationId(MY_FACEBOOK_APP_ID)
        .build();
}

1 个答案:

答案 0 :(得分:1)

在您的情况下,我不会使用openActiveSessionFromCache方法。只需使用第二种方法并使用Builder从头开始创建会话。它仍将首先使用令牌缓存,并且仅在用户之前无法登录时提示用户(或者您通过调用closeAndClearTokenInformation清除了缓存)。