4

我遇到了 Facebook 图形 API 没有返回任何请求以获取用户通知的问题。我是通过批处理请求来完成的,使用相同的语法来获取用户的新闻提要,并且新闻提要请求工作正常。我也启用了“manage_notifications”权限。当我尝试将图形调用的结果解析为通知时,我的代码中总是出现空指针异常。

请注意,当我在 Internet 浏览器中进入图形资源管理器并键入“me/notifications?include_read=true”时,我确实得到了适当的数据。

这是我的请求的代码。

static Request notificationsRequest = Request.newGraphPathRequest(fbSession, "me/notifications?include_read=true", new Request.Callback() {

    @Override
    public void onCompleted(Response response) {
        GraphObject object = response.getGraphObject();
        if(object != null){
            notifications = object.getProperty("data").toString();
        }
        else{
            notifications = "Notifications returns null";
        }

    }
});

有任何想法吗?谢谢。

编辑:我更新了代码,发现 GraphObject 对象返回 null,这就是为什么它无法从中解析任何内容。图形请求似乎有问题,但我无法弄清楚它是什么。就像我说的,获取用户新闻提要(“我/家庭”)的完全相同的方法工作得非常好。

4

2 回答 2

6

不要在 Graph 路径中传递参数,而是将其作为参数添加到请求中:

我/通知?include_read=true

static Request notificationsRequest = Request.newGraphPathRequest(fbSession, "me/notifications", new Request.Callback() {

    @Override
    public void onCompleted(Response response) {
        GraphObject object = response.getGraphObject();
        if(object != null){
            notifications = object.getProperty("data").toString();
        }
        else{
            notifications = "Notifications returns null";
        }

    }
});


Bundle params = new Bundle();
params.putString("include_read", "true");

notificationsRequest.setParameters(params);
于 2012-12-19T20:58:36.890 回答
0

我找到了另一种方法。我会发布它以防有人发现它有帮助

    private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    if (state.isOpened()) {
        InboxMessage.setVisibility(View.VISIBLE);

        new Request(session,"/me/notifications", null,HttpMethod.GET,new Request.Callback() {

                    public void onCompleted(Response response) {
                        GraphObject object = response.getGraphObject();
                            if (object != null) {
                                InboxMessage.setText(object.getProperty("data").toString());
                            } else {
                                InboxMessage.setText("Notifications returns null");
                            }
                    }
                }
            ).executeAsync();
    } else {
        InboxMessage.setVisibility(View.INVISIBLE);
        Log.i(TAG, "Logged out...");
    }
}
于 2014-07-23T21:14:25.380 回答