【问题标题】:How to get id and name from facebook profile using facebook sdk?如何使用 facebook sdk 从 facebook 个人资料中获取 id 和 name?
【发布时间】:2013-02-28 11:58:43
【问题描述】:

我知道方法是使用 JSON,并且我已经阅读了很多关于如何做到这一点的内容,但我仍然无法弄清楚我必须将 JSON 代码放在哪里,以便我可以获取 id 和名称,因为一切我试过没有用(为空)。你们能给我一个建议,我应该在哪里请求 id 和 name,这样我才能真正得到它们? 这是我主要课程中与 facebook 相关的所有内容:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}

@Override
protected void onResume() {
    super.onResume();
    updateLoginStatus();
}

public void updateLoginStatus() {
    loginStatus.setText("Logged into Facebook as "+        facebookConnector.getUserName() + facebookConnector.getFacebook().isSessionValid());
}

public void postMessage() {

    if (facebookConnector.getFacebook().isSessionValid()) {
        postMessageInThread();
    } else {
        SessionEvents.AuthListener listener = new SessionEvents.AuthListener() {

            @Override
            public void onAuthSucceed() {
                postMessageInThread();
            }

            @Override
            public void onAuthFail(String error) {

            }
        };
        SessionEvents.addAuthListener(listener);
        facebookConnector.login();

    }
}

private void postMessageInThread() {
    Thread t = new Thread() {
        public void run() {

            try {
                facebookConnector.postMessageOnWall("test");
                mFacebookHandler.post(mUpdateFacebookNotification);
            } catch (Exception ex) {
                Log.e(TAG, "Error sending msg",ex);
            }
        }
    };
    t.start();
}

private void clearCredentials() {
    try {
        facebookConnector.getFacebook().logout(getApplicationContext());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

上次我尝试过

 AsyncFacebookRunner myAsyncRunner = new AsyncFacebookRunner(facebook);
    myAsyncRunner.request("me", new meRequestListener());

然后

 public class meRequestListener implements RequestListener {

    public void onComplete(String response, Object state) {

        fbName = response;
    }

当我得到字符串时

public String getUserName () {
    return fbName;
}

它仍然是空的。请帮忙。

【问题讨论】:

    标签: java android facebook sdk


    【解决方案1】:

    你可以使用这个:(此代码使用 Facebook SDK 3.02)

    用户名:

    final Session session = Session.getActiveSession();
        if (session != null && session.isOpened()) {
            // If the session is open, make an API call to get user data
            // and define a new callback to handle the response
            Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
                @Override
                public void onCompleted(GraphUser user, Response response) {
                    // If the response is successful
                    if (session == Session.getActiveSession()) {
                        if (user != null) {
                            user_ID = user.getId();//user id
                            profileName = user.getName();//user's profile name
                            userNameView.setText(user.getName());
                        }   
                    }   
                }   
            }); 
            Request.executeBatchAsync(request);
        }  
    

    user_ID & profileName 是字符串。

    【讨论】:

    • 好的,我让它工作并在 login() 方法中添加了它,但我仍然在 textview 中得到空 toast 和 null。
    • 你有没有在 onComplete 方法中获取 id 并设置文本字段?
    • 就像我说的那样,我将该代码放在 FacebookConnector.java 中的 login() 方法中,并使用 getUserName() 和 getUserId() 获取名称和 ID,以便我可以在我的主要活动中设置它们。我不能在那里设置文本字段,因为它不是一个活动。
    • 由于互联网,我给出的代码需要一些时间才能获取 user_ID 和 userProfileName。如果你想用 user_id 做一些事情,那么你必须首先在 onComplete() 方法中得到它。这意味着你必须在user_ID = user.getId(); 这一行之后调用一个函数(你在哪个函数中编写你想要的代码)。
    • 是的,我确保在使用之前先获取名称和 ID。我在单击按钮时强制登录(),这会将吐司扔给我,吐司现在是“null null”而不是空的。仍然无法正常工作。
    【解决方案2】:

    试试这个:

    AsyncFacebookRunner myAsyncRunner = new AsyncFacebookRunner(facebook);
    JSONObject json = Util.parseJson(myAsyncRunner.request("me", new meRequestListener()));
                        String facebookID = json.getString("id");
                        String firstName = json.getString("name");                  
                        System.out.println("Details: "+id+" "+name);
    

    希望对你有所帮助..

    【讨论】:

    • 在 parseJson 处出错:不适用于参数 (void)。
    • 能不能把错误声明和meRequestListener()代码贴出来
    • 错误:Util 类型中的方法 parseJson(String) 不适用于参数 (void)。并且 meRequestListener() 代码在问题中,只是有一些更多实现的方法是空的。
    • Util 类中有没有这个 public static void parseJson(String response) 方法?
    • mm.. 我怎样才能检查出来?
    【解决方案3】:

    这就是解决方案

    String response = facebook.request("me", param, "GET");
    

    希望对遇到类似问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多