我在Android应用程序上从最终用户Facebook好友列表中获取位置数据时遇到了一些麻烦。
到目前为止,我可以成功开设一个Facebook会话,存储&恢复访问令牌并获取用户好友列表。
根据Android Facebook SDK> 3.0中的定义,Facebook用户数据在名为GraphUser
的对象中强类型。
要获取好友列表,我是用户Request.newMyFriendsRequest
,成功后会向我提供GraphUsers
列表。
不幸的是,尽管我为自己的努力提供了必要的权限,但我找不到最终用户朋友的姓名和身份证号码......这就是全部:每个最终用户的Facebook好友都是包含的GraphUser只有他们的名字和他们的身份证。
以下是我使用的权限列表:
"user_status", "read_friendlists", "email", "user_location", "friends_location"
使用Facebook LoginButton,SDK告诉最终用户该应用确实需要上述权限列表。
当我想使用Graphuser.getLocation时,我得到null
值。
没有城市,没有国家,没有邮政编码,没有任何东西。
这是检索最终用户数据的代码段:
public final void setCurrentUser(final Context context) {
if (this.session != null && this.session.isOpened()) {
final Request requestCurrentUserProfile = Request.newMeRequest(
this.session, new Request.GraphUserCallback() {
public final void onCompleted(final GraphUser user, final Response response) {
currentUser = user; // currentUser is defined as a class member
if (response.getError() != null ) {
// TODO
}
}
});
requestCurrentUserProfile.executeAsync();
} else
this.currentUser = null;
}
在这里放置一个断点,使用调试器,GraphUser表示完成:我拥有所需的所有数据,包括位置!
关于最终用户朋友列表...
public final void fetchFriendsList() {
if (this.session != null && this.session.isOpened()) {
final Request requestUserFriendsList = Request.newMyFriendsRequest(
this.session, new Request.GraphUserListCallback() {
public final void onCompleted(final List<GraphUser> users, final Response response) {
if (users != null && users.size() > 0)
userFriendsList = new ArrayList<GraphUser>(users);
}
}
);
requestUserFriendsList.executeAsync();
}
}
这是用户几乎为空的地方:只是名称和ID。这就是它,这就是全部。
Perhas这个Request
无法提供更多数据?
如果是这样,我应该使用哪种方法来获取我需要的数据?
谢谢!
[编辑]
查看我的应用评论状态我甚至不想恢复好友列表以及当前最终用户的位置数据? !
这里发生了什么?我不明白......请帮忙!
[EDIT2]
为了向您展示最终用户GraphUser与最终用户朋友列表GraphUsers之间的区别,下面是调试器的屏幕截图。 出于隐私原因,有意删除字段。
答案 0 :(得分:1)
在询问朋友的数据时,您可能必须在请求参数中明确请求这些字段。
像这样,
private void makeMyFriendsRequest(final Session session) {
Request request = Request.newMyFriendsRequest(session, new Request.GraphUserListCallback() {
@Override
public void onCompleted(List<GraphUser> users, Response response) {
// If the response is successful
if (session == Session.getActiveSession()) {
for (GraphUser user : users) {
System.out.println(user.getFirstName() + " " + user.getLastName());
System.out.println(users.get(i).getId());
GraphLocation loc = users.get(i).getLocation();
System.out.println(loc != null ? loc.getCity() : "loc not available");
}
}
}
});
// here add fields explicitly
Bundle bundle = request.getParameters();
bundle.putString("fields", "id,first_name,last_name,birthday,location");
request.executeAsync();
我希望这会有所帮助。
PS:我假设您使用登录按钮请求您的权限,
loginButton.setReadPermissions(Arrays.asList("user_location", "friends_location"));