用户首次使用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();
}
}
});
}
之后,我将userName
和userLastName
添加到firebase数据库。但它不起作用。根据我的测试,该应用程序永远不会进入方法public void onCompleted(final JSONObject object, GraphResponse response)
。
我究竟做错了什么?
谢谢!
答案 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 {
// ...
}