获取不同活动的Facebook个人资料信息

时间:2018-01-10 19:06:40

标签: android facebook firebase

用户首次使用Facebook在我的应用程序中成功登录后,他转到另一个获取其姓名的活动。以下是第二项活动中的代码:

if (isSignedInWithFacebook) {
        GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(final JSONObject object, GraphResponse response) {
                        try {
                            userName = response.getJSONObject().getString("first_name");
                            userLastName = response.getJSONObject().getString("last_name");
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
    }

之后,我将userNameuserLastName添加到firebase数据库。但它不起作用。根据我的测试,该应用程序永远不会进入方法public void onCompleted(final JSONObject object, GraphResponse response)。 我究竟做错了什么? 谢谢!

1 个答案:

答案 0 :(得分:0)

如果有人有兴趣,我理解我的错误。由于请求是异步操作,我需要在try{}块中执行所有操作(请求,解析并保存在数据库中)。并填写缺少的“参数”代码。最终代码:

if (isSignedInWithFacebook) {
        GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(final JSONObject object, GraphResponse response) {
                        try {
                            userName = object.getString("first_name");
                            userLastName = object.getString("last_name");
                            usersMap.put("name", userName);
                            usersMap.put("lastName", userLastName);
                            mUsersDatabaseReference.setValue(usersMap);
                            setResult(CompleteSignUpActivity.RESULT_OK, new Intent());
                            finish();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
        Bundle parameters = new Bundle();
        parameters.putString("fields", "first_name,last_name");
        request.setParameters(parameters);
        request.executeAsync();
    } else {
        // ...
    }