在调用“me / home”图谱API后,在解析JSON结果时,我尝试使用FQL进行另一个查询。我在前面的问题中解决了FQL查询问题。
我的实施背景是:我使用的是BaseAdapter
,在主要活动中,我使用多个JSON
发送从ArrayLists
解析的数据。如果我没有进行FQL查询,那么一切都很好。但是当我引入FQL查询时,查询始终在adapter
设置为ListView
后运行。这会导致arrayindexoutofbound异常。
这是我正在使用的代码,包括解析JSON结果时的其他FQL查询。为了保持代码简短,我将包括相关部分,因为其余的工作正常。但是,如果需要更多,我也会提出这个问题。
// GET THE POST'S LIKES COUNT
if (json_data.has("likes")) {
JSONObject feedLikes = json_data.optJSONObject("likes");
String countLikes = feedLikes.getString("count");
postLikesCountArrayList.add(countLikes);
// TEST STARTS
Runnable run = new Runnable() {
@Override
public void run() {
graph_or_fql = "fql";
String query = "SELECT likes.user_likes FROM stream WHERE post_id = \'"
+ finalThreadID + "\'";
Bundle params = new Bundle();
params.putString("method", "fql.query");
params.putString("query", query);
Utility.mAsyncRunner.request(null, params, new LikesListener());
}
};
TestNewsFeeds.this.runOnUiThread(run);
// TEST ENDS
} else {
String countLikes = "0";
postLikesCountArrayList.add(countLikes);
}
这是LikesListener
类的代码。它是在同一活动中声明的私有类:
private class LikesListener extends BaseRequestListener {
@Override
public void onComplete(final String response, final Object state) {
// Log.e("response", response);
try {
JSONArray JALikes = new JSONArray(response);
// Log.v("JALikes", JALikes.toString());
for (int j = 0; j < JALikes.length(); j++) {
JSONObject JOTemp = JALikes.getJSONObject(j);
// Log.e("JOTemp", JOTemp.toString());
if (JOTemp.has("likes")) {
JSONObject optJson = JOTemp.optJSONObject("likes");
// Log.v("optJson", optJson.toString());
if (optJson.has("user_likes")) {
String getUserLikeStatus = optJson.getString("user_likes");
Log.e("getUserLikeStatus", getUserLikeStatus);
arrayLikeStatus.add(getUserLikeStatus);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
我已经想出使用调试,崩溃的原因是在第二个查询完成之前调用的setAdapter。我发现在崩溃发生后,日志被添加到logcat中。
对此解决方案的任何帮助表示赞赏
更新:几乎在我即将放弃的时候找出解决方案。
答案 0 :(得分:1)
<强>解强>
因此,不必调用问题中使用的BaseRequestListener,而是必须进行此修改。
try {
graph_or_fql = "fql";
String query = "SELECT likes.user_likes FROM stream WHERE post_id = \'"
+ finalThreadID + "\'";
// Log.d("finalThreadID", finalThreadID);
Bundle params = new Bundle();
params.putString("method", "fql.query");
params.putString("query", query);
// Utility.mAsyncRunner.request(null, params, new LikesListener());
String fqlResponse = Utility.mFacebook.request(params);
// Log.e("fqlResponse", fqlResponse);
JSONArray JALikes = new JSONArray(fqlResponse);
// Log.v("JALikes", JALikes.toString());
for (int j = 0; j < JALikes.length(); j++) {
JSONObject JOTemp = JALikes.getJSONObject(j);
// Log.e("JOTemp", JOTemp.toString());
if (JOTemp.has("likes")) {
JSONObject optJson = JOTemp.optJSONObject("likes");
// Log.v("optJson", optJson.toString());
if (optJson.has("user_likes")) {
String getUserLikeStatus = optJson.getString("user_likes");
// Log.e("getUserLikeStatus", getUserLikeStatus);
arrayLikeStatus.add(getUserLikeStatus);
// Log.d("arrayLikeStatus", arrayLikeStatus.toString());
}
}
}
} catch (Exception e) {
// TODO: handle exception
}
希望这可以帮助别人节省时间,如果他们像我一样被卡住了。