我正在使用Facebook SDK 3.5开发一个安卓本地应用程序。
我试图有一个自动完成tetextview,在那里我可以选择一些Facebook的朋友,为此我使用了一个newMyFriendsRequest,如下所示。
private void fbFriendsRequest(final Session session) {
Request request = Request.newMyFriendsRequest(session, new Request.GraphUserListCallback() {
@Override
public void onCompleted(List<GraphUser> listFacebookFriends, Response response) {
// If the response is successful
if (session == Session.getActiveSession()) {
if (listFacebookFriends != null) {
mAdapter = new GraphUserAdapter(FriendPicker.this, listFacebookFriends);
mAutoComplete.setAdapter(mAdapter);
Toast.makeText(FriendPicker.this,"Friends Loaded",Toast.LENGTH_SHORT).show();
}
}
if (response.getError() != null) {
// Handle errors, will do so later.
}
}
});
request.executeAsync();
}
然后每次用户从自动完成的extview中选择一行,我就把这行添加到另一个列表中,当我按下 "确定 "按钮时,我有:
public void onOkClick(View v) {
if(mGraphUsersList.size()==0) {
setResult(RESULT_CANCELED,null);
} else {
Intent returnIntent = new Intent();
Iterator<GraphUser> itr = mGraphUsersList.iterator();
int n = mGraphUsersList.size();
String[] idfb = new String[n];
String[] names = new String[n];
String[] lastnames = new String[n];
int i = 0;
while(itr.hasNext()) {
GraphUser User = (GraphUser) itr.next();
idfb[i]=User.getId();
names[i]=User.getFirstName(); // problem
lastnames[i]=User.getLastName(); // problem
i++;
}
returnIntent.putExtra("idfb",idfb);
returnIntent.putExtra("names",names);
returnIntent.putExtra("lastnames",lastnames);
setResult(RESULT_OK,returnIntent);
}
finish();
}
当我使用getFirstName()和getLastName()函数时,我的字符串为空,但如果我使用getName()函数,则返回名字+姓氏。这就像在newMyFriendsRequest给出的列表中丢失了一些东西一样。
有谁知道这个问题的解决方法吗?
为了得到其他字段,除了 id
和 name
的朋友,你需要在你的请求中明确地指定他们。
为此,请将它们添加到 Bundle
的要求一样。
Request request = Request.newMyFriendsRequest(session, new Request.GraphUserListCallback() {
@Override
public void onCompleted(List<GraphUser> listFacebookFriends, Response response) {
// your code like you did
}
}
// here add fields explicitly
Bundle bundle = request.getParameters();
mBundle.putString("fields", "id,first_name,last_name");
// execute like you did
request.executeAsync();
这是你的一个解决方案,或者 另一个 是使用这个超级简单的库。android-simple-facebook
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Profile profile = Profile.getCurrentProfile();
Log.d("fbEmail_id", profile.getFirstName());
String first_name=profile.getFirstName();
String last_name=profile.getLastName();
}