Ответ Facebook Android SDK.getRequestForPagedResults(GraphResponse.PagingDirection.NEXT) возвращает null

#android #facebook-graph-api #pagination #facebook-sdk-4.0

#Android #facebook-graph-api #разбивка на страницы #facebook-sdk-4.0

Вопрос:

Я использую Android SDK от Facebook для получения информации о пользователе.

Мой первоначальный запрос следующий:

 GraphRequest request = GraphRequest.newMeRequest(
                AccessToken.getCurrentAccessToken(), this);

Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,events");
request.setParameters(parameters);
request.executeAndWait();
 

и это работает нормально. Обратный вызов выглядит следующим образом:

 @Override
public void onCompleted(JSONObject object, GraphResponse response) {
    User user = parseAndValidateFacebookResponse(object);
    if (user.getEvents().getData().size() != 0) {
       // do stuff here
    } 

    GraphRequest nextRequest = response.getRequestForPagedResults(GraphResponse.PagingDirection.NEXT);
    if (nextRequest != null) {
        Bundle parameters = new Bundle();
        parameters.putString("fields", "id,name,events");
        nextRequest.setParameters(parameters);
        nextRequest.setCallback(this);
        nextRequest.executeAsync();
    }
}
 

Я могу проанализировать JSONObject, и когда я проверяю необработанный ответ, он выглядит так же, как то, что мне дает обозреватель Graph API Facebook.

Часть JSON (как в необработанном GraphResponse, так и в Graph Explorer) описывает разбивку на страницы:

 "paging": {
  "cursors": {
    "before": "TVRRek1qTTJOREF3TXpZAMU1qQTFNRG94TmprNE5URTJNREF3T2pFNU9UZAzFPREF4TXpNNU9EUXdPQT09",
    "after": "TVRVM05qYzVNVEkxTlRrMU1ERTJNam94TkRjME1EVTVOakF3T2pFNU9UZAzFPREF4TXpNNU9EUXdPQT09"
  },
  "next": "https://graph.facebook.com/v2.8/customerID/events?access_token=accesstoken"
}
 

Однако, когда я пытаюсь получить следующий GraphRequest как часть GraphResponse, я всегда возвращаюсь null .

Что я делаю не так?

Ответ №1:

Я не уверен, связано ли это с тем фактом, что я использовал newMeRequest вместо «обычного» GraphRequest, но я получил эту работу после изменения моей реализации на следующую:

  Bundle parameters = new Bundle();
        parameters.putString("fields", "id,name,events");
        parameters.putString("limit", "25");

        new GraphRequest(
                AccessToken.getCurrentAccessToken(),
                "/"   Profile.getCurrentProfile().getId()   "/events",
                parameters,
                HttpMethod.GET,
                this)
        .executeAsync();

@Override
public void onCompleted(JSONObject object, GraphResponse response) {
    User user = parseAndValidateFacebookResponse(object);
    if (user.getEvents().getData().size() != 0) {
       // do stuff here
    } 

    GraphRequest nextRequest = response.getRequestForPagedResults(GraphResponse.PagingDirection.NEXT);
    if (nextRequest != null) {
        Bundle parameters = new Bundle();
        nextRequest.setParameters(parameters);
        nextRequest.setCallback(this);
        nextRequest.executeAsync();
    }
 

}

Прямо сейчас я могу переходить к следующим страницам, используя getRequestForPagedResults .