Facebook SDK错误:提供给处于未打开状态的请求的会话

时间:2013-10-15 01:20:09

标签: android facebook-android-sdk

我修改了Facebook Friend选择器示例。 我是第一次使用这个facebook sdk。 这是logcat。

10-15 06:43:16.189: D/Facebook-Example(26914): Exception: com.facebook.FacebookException: Session provided to a Request in un-opened state.

我已经检查了我的hashkey,但仍然会出现此错误。

这不是任何重复的问题,因为最后一个解决方案没有帮助。

当加载好友时,会出现此错误。

1 个答案:

答案 0 :(得分:1)

我解决了实现Session更改管理器方法的问题。 我的意思是在认证之后你必须等待会话打开。 所以我添加了UiLifecycleHelper对象和facebook建议的方法:

public class SelectionFragment extends Fragment {

private MainActivity activity;
private Context context;
private UiLifecycleHelper uiHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    activity = (MainActivity) getActivity();
    context = activity.getApplicationContext();
    uiHelper = new UiLifecycleHelper(activity, sessionCallback);
    uiHelper.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.selection_fragment, container, false);
    return view;
}


// Define a private variable that contains the implementation of the Session.StatusCallback listener:
private Session.StatusCallback sessionCallback = new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        onSessionStateChange(session, state, exception);
    }
};

@SuppressWarnings("deprecation")
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    if (session != null && session.isOpened()) {
        makeMeRequest(session); // my request
    } else {
                    ...
    }
}

@Override
public void onResume() {
    super.onResume();
    // For scenarios where the main activity is launched and user session is not null, the session state change notification
    // may not be triggered. Trigger it if it's open/closed.
    Session session = Session.getActiveSession();
    if (session != null && (session.isOpened() || session.isClosed())) {
        onSessionStateChange(session, session.getState(), null);
    }
    uiHelper.onResume();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    uiHelper.onActivityResult(requestCode, resultCode, data, nativeDialogCallback);

}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
    activity = null;

}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}
}