Android上的Facebook SDK - 检索状态

时间:2013-05-23 15:29:00

标签: android facebook facebook-opengraph

我正在尝试从android sdk访问用户状态。我使用了分页,但是当我运行应用程序时,我只获得一些结果,直到固定日期。我还尝试设置时间戳来检索状态无效。

我正在使用的代码是下面的代码。

public void downloadStatuses(final int _since){
    Session session = Session.getActiveSession();
    if( session != null ){

        Bundle params = new Bundle();
        //params.putInt("since", _since);
        //params.putInt("limit", 1000);
        params.putString("fields","from,id,message,updated_time,place");

        Request request = new Request(
                session,
                Facebook.STATUS_PATH,
                params,
                HttpMethod.GET,
                new Request.Callback() {                        
                    public void onCompleted(Response response) {
                        parseStatuses(response);
                        iterateStatuses(response);
                    }
                }
        );

        Request.executeBatchAsync(request);



    }
}

public void parseStatuses(Response _response){
    if( _response.getGraphObject() != null ) {
        try {

            JSONArray data = _response.getGraphObject()
                    .getInnerJSONObject()
                    .getJSONArray("data");


            int len = data.length();
            for(int i=0 ; i < len ; i++){                                       
                StatusWrapper status = new StatusWrapper(data.getJSONObject(i));
                Log.v("Status", status.updatedTime);

            }
        } catch (JSONException e) {
            Log.v("JSONException ", e.toString());
        }
    }
}

public void iterateStatuses(Response _response){        
    Request next = _response.getRequestForPagedResults(Response.PagingDirection.NEXT);
    if(next != null){
        next.setCallback(
                new Request.Callback() {
                    public void onCompleted(Response response) {
                        parseStatuses(response);
                        iterateStatuses(response);
                    }
                });

        Request.executeBatchAsync(next);
    }

}

代码工作(?)如下:首先它创建一个新请求来检索前25个项目并从downloadStatuses()发出请求。当这个函数完成时,它是对facebook的异步调用,首先我解析状态以使用parseStatuses完成我的工作,并且我尝试使用iterateStatuses移动到下一页结果。

IterateStatuses获取requestForPagingResults并尝试获取下一组结果。问题是,在四次调用iterateStatuses之后,requestForPagingResults返回null,但我知道有更多的状态,而不是我的墙上的状态。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

似乎你的问题是关于分页。 3.0 SDK有一个非常好的使用分页的方法,但它对列表中的无限滚动更有用。

如果你致电response.getRequestForPagedResults(direction),它会给你一个新的请求对象,你可以调用它来获取下一页。对于您的应用程序,您必须确保执行多个请求,但它可以一个接一个地关闭它们。一旦下一页请求为空,您就到了最后。