Android 在分析图形API结果时运行FQL查询会导致ArrayIndexOutOfBond异常

Android 在分析图形API结果时运行FQL查询会导致ArrayIndexOutOfBond异常,android,facebook,facebook-graph-api,facebook-fql,Android,Facebook,Facebook Graph Api,Facebook Fql,在调用“me/home”图形API之后,在解析JSON结果时,我尝试使用FQL进行另一个查询。FQL查询问题在我前面的问题中得到了解决 我实现的背景是:我正在使用BaseAdapter,从主活动中,我正在使用多个ArrayLists发送从JSON解析的数据。如果我没有进行FQL查询,那么一切都很顺利。但是当我引入FQL查询时,查询总是在适配器设置为列表视图之后运行。这会一直导致arrayindexoutofbound异常 这是我在解析JSON结果时使用的代码,包括附加的FQL查询。为了保持代码简

在调用“me/home”图形API之后,在解析JSON结果时,我尝试使用FQL进行另一个查询。FQL查询问题在我前面的问题中得到了解决

我实现的背景是:我正在使用
BaseAdapter
,从主活动中,我正在使用多个
ArrayLists
发送从
JSON
解析的数据。如果我没有进行FQL查询,那么一切都很顺利。但是当我引入FQL查询时,查询总是在
适配器
设置为
列表视图
之后运行。这会一直导致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();
            }
        }
    }
像Listener这样的私有类扩展了BaseRequestListener{
@凌驾
public void onComplete(最终字符串响应、最终对象状态){
//Log.e(“响应”,响应);
试一试{
JSONArray JALikes=新JSONArray(响应);
//Log.v(“JALikes”,JALikes.toString());
对于(int j=0;j
通过调试,我发现崩溃的原因是在第二个查询完成之前调用了setAdapter。我看到日志在崩溃发生后被添加到logcat

任何关于此问题解决方案的帮助都将不胜感激


更新:几乎在我即将放弃的时候就找到了解决方案。

解决方案

因此,必须进行此修改,而不是调用问题中使用的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
}
试试看{
图形或fql=“fql”;
String query=“选择likes.user\u likes FROM stream WHERE post\u id=\'”
+finalThreadID+“\”;
//Log.d(“finalthreaid”,finalthreaid);
Bundle params=新Bundle();
参数putString(“方法”、“fql.query”);
参数putString(“查询”,查询);
//request(null,params,newlikesListener());
字符串fqlResponse=Utility.mFacebook.request(参数);
//Log.e(“fqlResponse”,fqlResponse);
JSONArray JALikes=新JSONArray(fqlResponse);
//Log.v(“JALikes”,JALikes.toString());
对于(int j=0;j
希望这能帮助那些像我一样陷入困境的人节省时间