图形对象在尝试访问Facebook新闻源时返回null



我是Android编码的新手,我正在尝试访问Facebook新闻提要并在listview中显示。我在一个活动中使用 facebook 按钮小部件对用户进行身份验证,并将会话传递给下一个活动。会话正确通过,但是当我尝试获取新闻提要请求的响应并存储在 GraphObject 中时,它返回 null。

这是我尝试过的:

new Request(
            userSession,
            "/me/home",
            null,
            HttpMethod.GET,
            new Request.Callback() {
                public void onCompleted(Response response) {
                    try
                    {
                        GraphObject newsFeed  = response.getGraphObject();
                        JSONObject jsonObj=newsFeed.getInnerJSONObject();
                        JSONArray jsonArr = jsonObj.getJSONArray("data");
                        for(int i=0;i<jsonArr.length();i++)
                        {
                            JSONObject jsonObj1=jsonArr.getJSONObject(i);
                            strings.add(jsonObj1.getString("id"));
                        }
                    } catch (JSONException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
}
            }
        ).executeAsync();
}

调试时,图形对象返回 null。我是安卓开发的新手,一直在尝试阅读文档。任何更好地理解这一点的链接将不胜感激。提前谢谢。

确保:

1. 您已使用 OpenSSL 正确生成应用标识,并在应用程序清单中声明了该应用标识。

2. 应用程序包名称和应用程序 ID 已正确输入到您的 Facebook 应用程序详细信息页面上。

3. 您已申请相关权限并从FB获得。

4. 访问令牌有效(即非空)。

5. 访问令牌的会话状态为"已打开"。

有时是弃

用参数传递给 GraphRequest 的问题,所以要找到它,请将 facebook 错误检查代码写入 GraphRequest 这里我编写了名为 makeMeRequest(Accesstoken accesstoke)的完整方法,这里访问令牌由 facebook 提供,因此您必须在调用此方法时传递给它。这是此方法的代码

 private void makeMeRequest(AccessToken accesstoken) {          
             GraphRequest request = GraphRequest.newMeRequest(accesstoken, new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                FacebookRequestError facebookRequestError = response.getError();
                      if (facebookRequestError != null) {
                            Log.e("Error", facebookRequestError + "");
                        }
                        try {
                            System.out.println("GraphRequest response----" + object);
                            System.out.println("GraphRequest response----" + object.getString("name"));
                            System.out.println("GraphRequest response----" + object.getString("email"));
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        HashMap<String, String> fb_data = new HashMap<String, String>();
                        try {
                            fb_data.put("name", object.getString("name"));
                        } catch (Exception e) {
                            fb_data.put("name", "");
                        }
                        try {
                            fb_data.put("id", object.getString("id"));
                        } catch (Exception e) {
                            fb_data.put("id", "");
                        }
                        try {
                            fb_data.put("email", object.getString("email"));
                        } catch (Exception e) {
                            fb_data.put("email", "");
                        }
                        try {
                            fb_data.put("dob", object.getString("dob"));
                        } catch (Exception e) {
                            fb_data.put("dob", "");
                        }
                        pdialog.show();
                        if (fb_data.get("email").equalsIgnoreCase("") || fb_data.get("email") == null) {
                            checkSocialMedia("facebook", fb_data);
                        } else {
                            LoginProcess(fb_data, "facebook");
                        }
                    }
                });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "picture,id,name,link,email,gender,birthday,location,first_name,last_name");
                request.setParameters(parameters);
                request.executeAsync();
            }

在此方法中,您可以看到此代码将返回错误的代码,您将了解错误消息并可以对其进行管理

FacebookRequestError facebookRequestError = response.getError();
     if (facebookRequestError != null) {
                        Log.e("Error", facebookRequestError + "");
                    }
但是,如果

错误是关于已弃用的参数传递到图形请求对象中,则在它已弃用时对其进行检查,如果已弃用,它将打印到 facebook 错误消息中,您必须将其从参数中删除...这是来自方法makeMeRequest()的图形请求对象的代码

 Bundle parameters = new Bundle();
        parameters.putString("fields", "picture,id,name,link,email,gender,birthday,location,first_name,last_name");
        request.setParameters(parameters);
        request.executeAsync();

您只需要从中删除该参数

 parameters.putString("fields", "picture,id,name,link,email,gender,birthday,location,first_name,last_name");

并且您的fb登录集成工作正常

最新更新