Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 试图访问facebook新闻源时,Graph对象返回null_Android_Facebook_Facebook Graph Api - Fatal编程技术网

Android 试图访问facebook新闻源时,Graph对象返回null

Android 试图访问facebook新闻源时,Graph对象返回null,android,facebook,facebook-graph-api,Android,Facebook,Facebook Graph Api,我不熟悉Android编码,我正在尝试访问facebook新闻提要并在listview中显示。我在一个活动中使用facebook按钮小部件对用户进行身份验证,并将会话传递到下一个活动。会话被正确地传递,但当我尝试获取对GraphObject中的新闻提要和存储的请求的响应时,它返回null 这就是我所尝试的: new Request( userSession, "/me/home", null, Htt

我不熟悉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();
}
新请求(
用户会话,
“/我/家”,
无效的
HttpMethod.GET,
新的Request.Callback(){
未完成公共无效(响应){
尝试
{
GraphObject newsFeed=response.getGraphObject();
JSONObject jsonObj=newsFeed.getInnerJSONObject();
JSONArray jsonArr=jsonObj.getJSONArray(“数据”);
对于(int i=0;i确保:

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

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

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

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


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

有时是不推荐的参数传入GraphRequest的问题,因此要找到它,请将facebook错误检查代码写入GraphRequest。在这里,我编写了名为MakeMerRequest(Accesstoken AccessTok)的完整方法,这里的访问令牌是由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();
            }
但是,如果错误是关于传入graph request对象的已弃用参数,则检查它是否已弃用,如果已弃用,则它将打印到facebook错误消息中,并且您必须将其从参数中删除…以下是方法MakeMerRequest()中graph request对象的代码

您只需要从中删除该参数

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

您的fb登录集成工作正常

非常感谢您的回复,先生。错误是异步任务。我放置了一个单独的函数用于填充列表,并在获取JSON对象的内部调用。现在开始工作。先生,您是否可以在空闲时查看此问题。我已经按照您提到的所有内容进行了回答。
 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");