尝试访问facebook新闻源时,Graph Object返回null

时间:2014-11-22 22:56:07

标签: android facebook facebook-graph-api

我是Android编码新手,我正在尝试访问facebook新闻Feed并在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。我是android开发的新手,并且一直在尝试阅读这些文档。任何更好地理解这一点的链接将不胜感激。提前致谢。

2 个答案:

答案 0 :(得分:1)

确保:

1。您已使用OpenSSL正确生成了app-id并在应用程序清单中声明了它。

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

3。您已申请相关权限并已从FB收到。

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

5. 访问令牌的会话状态为OPENED。

答案 1 :(得分:0)

有些时候将参数的弃用问题传递给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登录集成工作正常