【问题标题】:Facebook SDK for android: getFirstName() and getLastName() return null stringsFacebook SDK for android:getFirstName() 和 getLastName() 返回空字符串
【发布时间】:2013-11-17 11:31:27
【问题描述】:

我正在使用 Facebook SDK 3.5 开发一个 android 原生应用。

我正在尝试有一个自动完成文本视图,我可以在其中选择一些 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 给出的列表中丢失了一样东西。

有人知道解决方法吗?

【问题讨论】:

    标签: android facebook facebook-android-sdk


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我用以下代码更改了一点代码:Bundle bundle = new Bundle(); bundle.putString("fields", "id,first_name,last_name"); request.setParameters(bundle);
    • @sromku 在哪里可以找到有关 Facebook SDK 的此类信息?怎么知道什么是默认可用的,什么需要明确添加?
    • @Jabbar_Jigariyo 恐怕没有这样的信息。我认为我阅读了他们 99% 的文档。我通过大量使用图形 API 资源管理器发现了这一点。例如,如果您运行/me/friends,您的朋友只会得到idname。此外,还看到了许多执行相同操作的代码示例。也许有一天,facebook 会有更好的文档来涵盖这些信息。
    • @sromku 感谢您的信息。我还查看了您的 github 库。看起来很有用。
    【解决方案2】:
                    @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();
                    }
    

    【讨论】:

    • 嗨! Profile 来自哪里?为了清楚起见,请在您的代码中添加一些 cmets/解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2020-01-27
    • 2020-07-11
    • 2015-05-25
    • 2011-05-09
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多