在Android上与Facebook打开新会话后,方法停止

时间:2013-12-30 19:06:05

标签: android facebook session facebook-graph-api

我正在尝试将我的Android应用程序中的照片发布到Facebook墙上,它可以工作,但我需要使用两次发布按钮,第一次授权用于登录,第二种授权用于授权我的应用。

我不知道为什么在请求新会话后,即Session.openActiveSession(this, true, callback);,我的方法的其余部分停止运行,所以在我再次调用该方法后,它现在请求app权限并发布< / p>

以下是关注的部分:

点击发布按钮performPublish(PendingAction.POST_PHOTO, false);

后调用此方法
private void performPublish(PendingAction action, boolean allowNoSession) {

    // check for log in first
    if (Session.getActiveSession() == null || Session.getActiveSession().isClosed()) {
        Session.openActiveSession(this, true, callback);
    } 
        // the method stops here
    Session session = Session.getActiveSession();
    if (session != null) {
        pendingAction = action;
        if (hasPublishPermission()) {
            // We can do the action right away.
            handlePendingAction();
            return;
        } else if (session.isOpened()) {
            // We need to get new permissions, then complete the action when we get called back.
            session.requestNewPublishPermissions(new Session.NewPermissionsRequest(this, "publish_actions"));
            return;
        }
    }

    if (allowNoSession) {
        pendingAction = action;
        handlePendingAction();
    }
}

其余部分,但它们与此问题无关

   @SuppressWarnings("incomplete-switch")
    private void handlePendingAction() {
        PendingAction previouslyPendingAction = pendingAction;
        // These actions may re-set pendingAction if they are still pending, but we assume they
        // will succeed.
        pendingAction = PendingAction.NONE;

        switch (previouslyPendingAction) {
            case POST_PHOTO:
                postPhoto();
                break;
        }
    }

    private boolean hasPublishPermission() {
        Session session = Session.getActiveSession();
        return session != null && session.getPermissions().contains("publish_actions");
    }

private void postPhoto() {
     if (hasPublishPermission()) {


    //if (Session.getActiveSession().getPermissions().contains("publish_actions") && (Session.getActiveSession() != null || Session.getActiveSession().isOpened()))
            showLoading();
            Request request = Request.newUploadPhotoRequest(Session.getActiveSession(), myBm, new Request.Callback() {
                @Override
                public void onCompleted(Response response) {
                    hideLoading();
                    showPublishResult("photo_post", response.getGraphObject(), response.getError());
                    //Toast.makeText(getApplicationContext(), "Photo successfully uploaded to Facebook.", Toast.LENGTH_SHORT).show();                   
                }
            });
            Bundle parameters = request.getParameters(); 

            // photo's description
            if (moment.name != null)
                parameters.putString("message",moment.name);

            request.setParameters(parameters);
            request.executeAsync();

        }
        else {
            pendingAction = PendingAction.POST_PHOTO;
        }
}

1 个答案:

答案 0 :(得分:1)

在调用openActiveSession之后,其余方法将停止运行,因为打开会话是异步的。因此,在您调用openActiveSession之后,会话未打开。它启动另一个活动(LoginActivity),提示用户等,然后通过onActivityResult方法返回答案。

如果您想一键处理它,您应该在状态回调中添加一些代码,并检查是否有待发布的发布,如果是,请在那时进行发布。

SDK附带的HelloFacebook示例应用程序演示了如何执行此操作。