android - 适用于 Android 的 Facebook SDK : getFirstName() and getLastName() return null strings

标签 android facebook facebook-android-sdk

我正在使用 Facebook SDK 3.5 开发 Android 原生应用。

我正在尝试有一个自动完成 TextView ,我可以在其中选择一些 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();
}

然后每次用户从 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();
}

当我使用 getFirstName() 和 getLastName() 函数时,我有空字符串,但如果我使用 getName() 函数,它会返回名字+姓氏。这就像在 newMyFriendsRequest 给出的列表中丢失了某些东西。

有人知道解决这个问题的方法吗?

最佳答案

要获取好友的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();

这是适合您的一种解决方案,或者另一种是使用这个 super 简单的库:android-simple-facebook

关于android - 适用于 Android 的 Facebook SDK : getFirstName() and getLastName() return null strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030123/

相关文章:

Android 测试 - 应用程序在一部手机上运行,​​但在其他手机上崩溃

java - viewFlipper.getDisplayedChild 空对象引用

javascript - 为 FB 发送添加自定义按钮

android - facebook-androidk-sdk 3.0.1 作为 maven android 中的库项目

java - 编译时出现 SQLiteException : no such column itemId: ,:

java - Android Intent 在电子表格中打开 CSV

facebook - 有官方的 Facebook Graph Search API 吗?

ios - Facebook 和 Twitter 分享按钮停止工作

android - 关于 Android 应用程序 MVP 模式的问题

android - 使用 API 删除 Facebook 帐户