Android } }捕获(例外e){ e、 printStackTrace(); } } }); Request.executeBatchAsync(reqPage); } }捕获(例外e){ e、 printStackTrace(); } //Log.e(“AUTHOR RESPONSE”,resAuthor.toString()); } }); Request.executeBatchAsync(reqAuthor); } /*将收集的数据添加到ARRAYLIST*/ arrFeeds.add(feed); 低压设置适配器(适配器); } }捕获(例外e){ e、 printStackTrace(); } }否则{ } } }); Request.executeBatchAsync(请求); } });

Android } }捕获(例外e){ e、 printStackTrace(); } } }); Request.executeBatchAsync(reqPage); } }捕获(例外e){ e、 printStackTrace(); } //Log.e(“AUTHOR RESPONSE”,resAuthor.toString()); } }); Request.executeBatchAsync(reqAuthor); } /*将收集的数据添加到ARRAYLIST*/ arrFeeds.add(feed); 低压设置适配器(适配器); } }捕获(例外e){ e、 printStackTrace(); } }否则{ } } }); Request.executeBatchAsync(请求); } });,android,facebook,facebook-fql,Android,Facebook,Facebook Fql,第一个查询工作正常,从流FQL表中获取帖子。但是对用户、页面或应用程序进行嵌套查询时,FQL表总是排在最后,因此不会显示在ListView中。是否不允许嵌套查询?如果不是这样,我如何在主流查询中嵌套多个查询?这是必要的,因为帖子的作者可以是应用程序或页面,而不一定是正常的用户 附言:对不起,这篇文章太长了。我想不漏掉任何东西。:-) 您能详细说明一下这句话吗,“但是对用户、页面或应用FQL表进行嵌套查询总是排在最后,因此不会显示在ListView中。”从代码上看,它类似于初始posts/stre

第一个查询工作正常,从FQL表中获取帖子。但是对用户页面应用程序进行嵌套查询时,FQL表总是排在最后,因此不会显示在ListView中。是否不允许嵌套查询?如果不是这样,我如何在主查询中嵌套多个查询?这是必要的,因为帖子的作者可以是应用程序或页面,而不一定是正常的用户


附言:对不起,这篇文章太长了。我想不漏掉任何东西。:-)

您能详细说明一下这句话吗,“但是对用户、页面或应用FQL表进行嵌套查询总是排在最后,因此不会显示在ListView中。”从代码上看,它类似于初始posts/stream查询完成回调,然后调用用户/page/app请求。这不是你想要的吗?我想你这里的问题是,以前所有的请求都是同步发出的(在发出进一步的请求之前,你一直在等待返回结果),而在新的实现中,你是异步发出请求的,这就是为什么你没有像以前那样看到结果的原因。@CAbernathy:很抱歉回复得太晚了。实际上,在我之前的实现中,我首先查询FQL流,获取
author\u id
,然后立即使用它查询名称和配置文件图片。这一过程同时发生。现在,它首先获取steam结果,然后查询用户、页面或应用程序FQL表。我暂时转向使用GraphAPI的“me/home”端点,但我更愿意使用FQL。我怎样才能让它像以前一样工作?查询同步运行,而不是像现在这样一个接一个地运行?
String qryFeeds = 
        "SELECT post_id, created_time, updated_time, filter_key, actor_id, message, app_data, attachment, comments, likes, place, permalink, description, type FROM stream WHERE filter_key in (SELECT filter_key FROM stream_filter WHERE uid = me() AND type = 'newsfeed') LIMIT 10 OFFSET 0";
Bundle bun = new Bundle();
bun.putString("method", "fql.query");
bun.putString("query", qryFeeds);
String result = Utility.mFacebook.request(bun);
JSONArray JAFeeds = new JSONArray(result);

for (int i = 0; i < JAFeeds.length(); i++) {
    JSONObject JOFeeds = JAFeeds.getJSONObject(i);

    /** GET THE ACTOR DETAILS **/
    if (JOFeeds.has("actor_id"))    {
        ACTOR_ID = JOFeeds.getString("actor_id");
        feeds.setActorID(ACTOR_ID);

        // GET ACTOR DETAILS FROM GLOBAL METHOD
        String[] strArrActorDetails =  userDetails.getActorDetails(ACTOR_ID);
        ACTOR_NAME = strArrActorDetails[0];
        ACTOR_PROFILE = strArrActorDetails[1];

        // SET DETAILS TO THE POJO FOR THE ARRAYLIST
        if (ACTOR_NAME != null) {
            feeds.setActorName(ACTOR_NAME);
        } else {
            feeds.setActorName(null);
        }

        if (ACTOR_PROFILE != null)  {
            feeds.setActorProfile(ACTOR_PROFILE);
        } else {
            feeds.setActorProfile(null);
        }
    } else {
        ACTOR_ID = null;
        feeds.setActorID(ACTOR_ID);

        ACTOR_NAME = null;
        feeds.setActorName(ACTOR_NAME);

        ACTOR_PROFILE = null;
        feeds.setActorProfile(ACTOR_PROFILE);
    }
}
try {
    // QUERY THE USER FQL TABLE
    String queryUser = 
            "SELECT name, pic_big " +
            "FROM user " +
            "WHERE uid=" + strActorID;
    Bundle bunQryUser = new Bundle();
    bunQryUser.putString("method", "fql.query");
    bunQryUser.putString("query", queryUser);
    String resultQueryUser = Utility.mFacebook.request(bunQryUser);
    JSONArray JAUser = new JSONArray(resultQueryUser);

    if (JAUser.length() == 0)   {

        // QUERY THE PAGE FQL TABLE
        String queryPage = 
                "SELECT name, pic_big " +
                "FROM page " +
                "WHERE page_id=" + strActorID;
        Bundle bunQryPage = new Bundle();
        bunQryPage.putString("method", "fql.query");
        bunQryPage.putString("query", queryPage);
        String resultQryPage = Utility.mFacebook.request(bunQryPage);
        JSONArray JAPage = new JSONArray(resultQryPage);

        if(JAPage.length() == 0)    {
            // QUERY THE APPLICATION FQL TABLE
            String queryApp = 
                    "SELECT display_name, logo_url " +
                    "FROM application " +
                    "WHERE app_id = " + strActorID;
            Bundle bunQryApp = new Bundle();
            bunQryApp.putString("method", "fql.query");
            bunQryApp.putString("query", queryApp);
            String resultQryApp = Utility.mFacebook.request(bunQryApp);
            JSONArray JAApp = new JSONArray(resultQryApp);

            if (JAApp.length() == 0)    {
                // DO NOTHING AT THE MOMENT
            } else {
                for (int j = 0; j < JAApp.length(); j++) {
                    JSONObject JOApp = JAApp.getJSONObject(j);

                    // PROCESS THE RESULT DATA

                    return new String[] {strActorName, strActorProfile};
                }
            }

        } else {
            for (int j = 0; j < JAPage.length(); j++) {
                JSONObject JOPage = JAPage.getJSONObject(j);

                // PROCESS THE RESULT DATA

                return new String[] {strActorName, strActorProfile};
            }
        }
    } else {
        for (int j = 0; j < JAUser.length(); j++) {
            JSONObject JOUser = JAUser.getJSONObject(j);

            // PROCESS THE RESULT DATA

            return new String[] {strActorName, strActorProfile};
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}
Session.openActiveSession(getActivity(), true, new Session.StatusCallback() {

    @Override
    public void call(final Session session, SessionState state, Exception exception) {

        String qryFeeds = 
                "SELECT post_id, created_time, updated_time, filter_key, " +
                "actor_id, message, app_data, attachment, comments, " +
                "likes, place, permalink, description, type " +
                "FROM stream WHERE filter_key in " +
                "(SELECT filter_key FROM stream_filter " +
                "WHERE uid = me() AND type = 'newsfeed') " +
                "LIMIT 10 OFFSET 0";
        Bundle bun = new Bundle();
        bun.putString("q", qryFeeds);

        Request request = new Request(session, "/fql", bun, HttpMethod.GET, new Request.Callback() {

            @Override
            public void onCompleted(Response response) {

                // CAST THE RESULT IN A GRAPHOBJECT
                GraphObject grphObject = response.getGraphObject();

                // CHECK THAT THE GRAPHOBJECT INSTANCE HAS DATA
                if (grphObject != null) {

                    JSONObject JORoot = grphObject.getInnerJSONObject();

                    try {

                        // CAST THE JORoot CONTENTS INTO A JSONARRAY
                        JSONArray JAFeeds = JORoot.getJSONArray("data");

                        for (int i = 0; i < JAFeeds.length(); i++) {
                            JSONObject JOFeeds = JAFeeds.getJSONObject(i);
//                                  Log.e("JOFeeds", JOFeeds.toString());

                            // INSTANTIATE THE NewsfeedData CLASS INSTANCE
                            feeds = new NewsfeedData();

                            if (JOFeeds.has("actor_id"))    {

                                final String strActorID = JOFeeds.getString("actor_id");
                                Log.e("strActorID", strActorID);
                                feeds.setActorID(strActorID);

                                String qryAuthor = 
                                        "SELECT name, pic_big " +
                                        "FROM user " +
                                        "WHERE uid=" + strActorID;
                                Bundle bunAuthor = new Bundle();
                                bunAuthor.putString("q", qryAuthor);

                                Request reqAuthor = new Request(session, "/fql", bunAuthor, HttpMethod.GET, new Request.Callback() {

                                    @Override
                                    public void onCompleted(Response resAuthor) {

                                        GraphObject grp = resAuthor.getGraphObject();
                                        JSONObject JORoot = grp.getInnerJSONObject();

                                        try {
                                            JSONArray JAUser = JORoot.getJSONArray("data");

                                            /* GET THE ACTOR DETAILS FROM THE USER FQL TABLE */
                                            if (JAUser.length() != 0)   {

                                                for (int i = 0; i < JAUser.length(); i++) {
                                                    JSONObject JOUser = JAUser.getJSONObject(i);
//                                                          Log.e("JOUser", JOUser.toString());

                                                    /* PROCESS THE RESULT DATA */

                                                }

                                            } else {
                                                String qryPage = 
                                                        "SELECT name, pic_big " +
                                                        "FROM page " +
                                                        "WHERE page_id=" + strActorID;
                                                Bundle bunPage = new Bundle();
                                                bunPage.putString("q", qryPage);

                                                Request reqPage = new Request(session, "/fql", bunPage, HttpMethod.GET, new Request.Callback() {

                                                    @Override
                                                    public void onCompleted(Response resPage) {

                                                        GraphObject grpPage = resPage.getGraphObject();
                                                        JSONObject JORoot = grpPage.getInnerJSONObject();

                                                        try {
                                                            JSONArray JAPage = JORoot.getJSONArray("data");

                                                            /* GET THE ACTOR DETAILS FROM THE PAGE FQL TABLE */
                                                            if (JAPage.length() != 0)   {

                                                                for (int i = 0; i < JAPage.length(); i++) {
                                                                    JSONObject JOPage = JAPage.getJSONObject(i);

                                                                    /* PROCESS THE RESULT DATA */
                                                                }

                                                            } else {

                                                            }

                                                        } catch (Exception e) {
                                                            e.printStackTrace();
                                                        }

                                                    }
                                                }); Request.executeBatchAsync(reqPage);

                                            }

                                        } catch (Exception e) {
                                            e.printStackTrace();
                                        }

//                                              Log.e("AUTHOR RESPONSE", resAuthor.toString());

                                    }
                                }); Request.executeBatchAsync(reqAuthor);
                            }

                            /* ADD COLLECTED DATA TO THE ARRAYLIST */
                            arrFeeds.add(feeds);

                            lv.setAdapter(adapter);
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                } else {

                }

            }
        }); Request.executeBatchAsync(request);

    }
});