Android中如何打印Facebook GraphRequest用户信息及解决回调未执行问题
解决Facebook GraphRequest回调未执行及无法打印用户信息的问题
排查与修复步骤:
修正语法错误
你的代码中匿名回调类的闭合括号存在错误,导致回调无法正确绑定到请求:// 错误写法 @Override public void onCompleted(@Nullable JSONObject jsonObject, @Nullable GraphResponse graphResponse) { // ... }); // 正确写法 @Override public void onCompleted(@Nullable JSONObject jsonObject, @Nullable GraphResponse graphResponse) { // ... })); // 先闭合匿名类大括号,再完成new请求的括号闭合确保登录时申请了必要权限
获取email字段必须提前申请email权限,登录代码需包含该权限:LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"));未申请对应权限时,Facebook会拒绝返回敏感字段,甚至直接导致请求异常。
替换System.out.println为Android日志工具
Android中System.out.println的输出可能无法在Logcat中显示,改用官方日志API才能稳定查看输出:@Override public void onCompleted(@Nullable JSONObject jsonObject, @Nullable GraphResponse graphResponse) { if (graphResponse == null) { Log.e("FacebookRequest", "响应为空"); return; } // 先检查请求是否出错 if (graphResponse.getError() != null) { Log.e("FacebookError", "请求错误:" + graphResponse.getError().getErrorMessage()); return; } // 打印原始响应 String rawResponse = graphResponse.getRawResponse(); Log.d("FacebookResponse", "rawResponse: " + rawResponse); // 解析并打印name和email try { String name = jsonObject.getString("name"); String email = jsonObject.getString("email"); Log.d("FacebookUserInfo", "用户名:" + name + " | 邮箱:" + email); } catch (JSONException e) { Log.e("FacebookParse", "解析失败:" + e.getMessage()); } }检查AccessToken有效性
发起请求前先验证Token状态,避免因Token无效导致请求失败:AccessToken accessToken = loginResult.getAccessToken(); Log.d("FacebookToken", "Token是否有效:" + accessToken.isValid()); Log.d("FacebookToken", "已获取权限:" + accessToken.getPermissions());确认设备网络状态
GraphRequest需要网络请求才能获取数据,设备断网时回调不会触发,需确保设备处于联网状态。
内容的提问来源于stack exchange,提问作者Jaime Montoya
相关产品推荐
相关产品推荐

