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