使用Facebook SDK创建打开请求时,我收到以下错误。
错误:
引起:java.lang.UnsupportedOperationException:Session:尝试打开已打开的会话。 在com.facebook.Session.open(Session.java:985) 在com.facebook.Session.openForRead(Session.java:388) 在com.photos.pixitor.activities.PhotoEffectBaseActivity.loginRequest(PhotoEffectBaseActivity.java:619)
如果我首先发出请求,则不会发生错误。但是在首先发出登录请求然后取消请求并再次主要登录请求之后,应用程序崩溃了。
以下是代码:
OpenRequest request = new Session.OpenRequest(this); request.setPermissions(Arrays.asList( “basic_info”));
if(session.isOpened()){
session.requestNewReadPermissions(new NewPermissionsRequest(
PhotoEffectBaseActivity.this,"basic_info"));
session.addCallback(new StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if(state.isOpened()){
Util.logd("Opened+Publishing Request");
publishPhotoRequest(session);
}
if(session.isOpened()){
Util.logd("Session is Opened");
getUserDetails(session);
}
}
});
return session;
}
Util.logd("Session Not Opened: Opening For Read");
session.openForRead(request);
Util.logd("Session is Opened for Read");
session.addCallback(new StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if(state.isOpened()){
Util.logd("Opened+Publishing Request");
publishPhotoRequest(session);
}
if(session.isOpened()){
Util.logd("Session is Opened");
getUserDetails(session);
}
}
});
答案 0 :(得分:0)
要认识到的一点是会话开放是异步的(因为它需要可能调用Facebook应用程序,并获得用户输入)。所以你不能连续两次session.open *调用而不等待第一个返回。
您的代码中发生的事情是:
if (session.isOpened()) {
// MAKE AN OPEN REQUEST
}
// MAKE ANOTHER OPEN REQUEST
如果您的会话已经打开,这基本上会连续打开2个请求。
那你怎么解决这个问题呢?
首先,session.requestNewReadPermissions()
调用是不必要的,因为它只询问“basic_info”,默认情况下是这样,因此您无需要求任何其他权限。你可以删除整个块。
其次,如果您确实想要请求其他读取权限,则可以将它们添加到稍后调用的session.openForRead()
方法中。
最后,我在您的代码中注意到了其他一些问题:您在调用session.openForRead()
之后添加了回调,这可能无法按照您的意愿运行。您需要将回调添加到request
,然后再调用openForRead。您还尝试发布照片,但我没有看到任何要求的发布权限。