In my android application Facebook Friends are loading on a button click.I have used following functions to get facebook friends.But I am not getting Facebook friends if the post permission is not given by the user.The session is getting as CLOSED_LOGIN_FAILED after giving Post permission.If the post permission is there Facebook friends loaded in the list view.What is problem in my code.Please help me .Thanks in advance.
private boolean hasPublishPermission() {
Session session = Session.getActiveSession();
return session != null
&& session.getPermissions().contains("publish_stream");
}
private void getFacebookFriends(final Session session) {
Session msession = session;
if (msession.isOpened()) {
if (!hasPublishPermission()) {
if (progressDlg != null) {
progressDlg.dismiss();
}
msession.requestNewPublishPermissions(new NewPermissionsRequest(
FindFriendsActivity.this, PERMISSIONS));
} else {
if (progressDlg != null) {
progressDlg.dismiss();
}
Request friendRequest = Request.newMyFriendsRequest(msession,
new GraphUserListCallback() {
public void onCompleted(List<GraphUser> users,
Response response) {
fbfrndsDetails.clear();
isfindFriendsFromFB = false;
ArrayList<FriendsFinderRequest> data = new ArrayList<FriendsFinderRequest>();
for (int i = 0; i < users.size(); i++) {
Log.d("name", "" + users.get(i).toString());
FriendsDetails fbfrndDetail = new FriendsDetails();
JSONObject jobj;
try {
jobj = users.get(i)
.getInnerJSONObject();
Log.e("name",
"" + jobj.getString("name"));
Log.e("id", "" + jobj.getString("id"));
JSONObject ob = jobj
.getJSONObject("picture");
JSONObject obj = ob
.getJSONObject("data");
} catch (Exception e1) {
e1.printStackTrace();
}
}
if (progressDlg != null) {
progressDlg.dismiss();
}
}
});
Bundle params = new Bundle();
params.putString("fields", "id,name,picture");
friendRequest.setParameters(params);
friendRequest.executeAsync();
}
} else {
if (progressDlg != null) {
progressDlg.dismiss();
}
Session.OpenRequest openRequest = null;
openRequest = new Session.OpenRequest(FindFriendsActivity.this);
if (openRequest != null) {
openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
if (!hasPublishPermission()) {
openRequest.setPermissions(PERMISSIONS);
}
if (session.getState() == SessionState.CLOSED_LOGIN_FAILED) {
Session.setActiveSession(null);
msession = new Session(FindFriendsActivity.this);
Session.setActiveSession(msession);
msession.openForPublish(openRequest);
} else {
session.openForPublish(openRequest);
}
}
}
}
private void onSessionStateChange(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
if (isfindFriendsFromFB) {
rootLayout.setVisibility(View.GONE);
progressDlg = ProgressDialog.show(FindFriendsActivity.this, "",
"Please wait");
Request friendRequest = Request.newMyFriendsRequest(session,
new GraphUserListCallback() {
public void onCompleted(List<GraphUser> users,
Response response) {
isfindFriendsFromFB = false;
ArrayList<FriendsFinderRequest> data = new ArrayList<FriendsFinderRequest>();
for (int i = 0; i < users.size(); i++) {
Log.d("name", "" + users.get(i).toString());
FriendsDetails fbfrndDetail = new FriendsDetails();
JSONObject jobj;
try {
jobj = users.get(i)
.getInnerJSONObject();
Log.e("name",
"" + jobj.getString("name"));
Log.e("id", "" + jobj.getString("id"));
JSONObject ob = jobj
.getJSONObject("picture");
JSONObject obj = ob
.getJSONObject("data");
} catch (Exception e1) {
e1.printStackTrace();
}
}
if (progressDlg != null) {
progressDlg.dismiss();
}
}
});
Bundle params = new Bundle();
params.putString("fields", "id,name,picture");
friendRequest.setParameters(params);
friendRequest.executeAsync();
}
} else if (state.isClosed()) {
if (progressDlg != null) {
progressDlg.dismiss();
}
}
}
在请求发布权限之前,应用程序应请求读取用户好友列表的权限
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.