2013-10-15 38 views
3

我已修改Facebook Friend选取器示例。 我第一次使用这个Facebook的SDK。 这里是logcat。Facebook SDK错误:会话提供给未开启状态的请求

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

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

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

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

+0

你给它一个请求之前打开的会话?会话对象在使用访问令牌之前需要处于“打开”状态。 –

+0

是的,用户在先前的页面登录。用户已成功登录。 @MingLi –

+0

我有同样的问题。你修好了吗? –

回答

1

我解决了这个问题,实现了会话管理器更改的方法。 我的意思是在验证后,你必须等待会话打开。 所以我添加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); 
} 
} 
相关问题