Я не могу извлечь какое-либо значение из GraphRequest (). ExecuteAsync ()

Я использую api графика facebook для android. Я не могу извлечь какое-либо значение из GraphRequest ([...]). ExecuteAsync (). Таким образом, возвращаемая строка всегда пуста

public String getPost(){
        new GraphRequest(
                AccessToken.getCurrentAccessToken(), "me?fields=friends,name", null, HttpMethod.GET,
                new GraphRequest.Callback() {
                    public void onCompleted(GraphResponse response) {

                        JSONObject object = response.getJSONObject();
                        try {
                            friends = object.getJSONObject("friends").getJSONObject("summary").getString("total_count");
                        } catch (JSONException e) {
                            e.printStackTrace();
                        };

                    }
                }
        ).executeAsync();

        return friends;
}

Конечно, это асинхронный вызов. Буквально он называется executeAsync. friends не устанавливается, когда вы возвращаетесь, он устанавливается в onCompleted, который будет вызываться когда-нибудь в будущем, в частности, когда этот GraphRequest будет завершен (отсюда и название onCompleted). Это все равно, что спросить, почему ответ на ваше письмо волшебным образом не появился у вас в руке после того, как положил письмо в почтовый ящик.

Max Vollmer 23.05.2018 11:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
75
1

Ответы 1

return friends вернет значение по умолчанию friends. здесь вы не получаете поведения executeAsync(). executeAsync() будет работать асинхронно, и метод вернется сразу после планирования задачи executeAsync().

Данные, то есть friends, изменяются внутри метода обратного вызова, поэтому вы должны вернуть их из onCompleted().

Для возврата данных вы можете использовать интерфейс обратного вызова. См. Как определить обратный вызов.

Другие вопросы по теме