用于android的Facebook SDK:getFirstName()和getLastName()返回空字符串

Ger*_*ryR 5 android facebook facebook-android-sdk

我正在使用Facebook SDK 3.5开发一个Android原生应用程序.

我正在尝试使用autocompletetextview,我可以选择一些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();
}
Run Code Online (Sandbox Code Playgroud)

然后,每次用户从autocompletetextview中选择一行时,我将此行添加到另一个列表,当我按下OK按钮时,我有:

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();
}
Run Code Online (Sandbox Code Playgroud)

当我使用getFirstName()和getLastName()函数时,我有空字符串,但如果我使用getName()函数,则返回名称+ lastname.就像在newMyFriendsRequest给出的列表中,某些东西已经丢失了.

有人知道解决方法吗?

sro*_*mku 10

要获得其他领域比idname朋友,你需要在你的要求明确指定.

为此,将它们添加到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();
Run Code Online (Sandbox Code Playgroud)

这是一个解决方案,或者另一个是使用这个超级简单的库:android-simple-facebook

  • 谢谢!我改变了一些代码:`Bundle bundle = new Bundle(); bundle.putString("fields","id,first_name,last_name"); request.setParameters(束);` (4认同)
  • @Jabbar_Jigariyo我不敢说,没有这样的信息.我认为我读了他们所有文档的99%.我通过图形api资源管理器玩了很多.例如,如果你运行`/ me/friends`,你的朋友只能获得'id`和`name`.此外,看到了许多相同的代码示例.也许有一天,Facebook将有更好的文档来涵盖这些信息. (2认同)