【问题标题】:Graph Object returns null when trying to access facebook news feed尝试访问 facebook 新闻提要时,图形对象返回 null
【发布时间】:2016-10-15 18:24:45
【问题描述】:

我是 Android 编码新手,我正在尝试访问 facebook 新闻提要并在列表视图中显示。我在一个活动中使用 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 开发的新手,并且一直在尝试阅读文档。任何可以更好地理解这一点的链接将不胜感激。提前致谢。

【问题讨论】:

    标签: android facebook facebook-graph-api


    【解决方案1】:

    确保:

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

    2.在您的 Facebook 应用详情页面上正确输入了应用包名称和应用 ID。

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

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

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

    【讨论】:

    • 非常感谢先生的回复。错误是异步任务。我放置了一个单独的函数来填充列表并在获取 JSON 对象时调用。现在工作。
    • 先生,您能在闲暇时研究一下吗?我已经关注了你为这个答案提到的所有内容。 stackoverflow.com/questions/27119346/…
    【解决方案2】:

    有时是不推荐使用的参数传递给 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 登录集成工作正常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      相关资源
      最近更新 更多