Подтвердить что ты не робот

Google Api Client когда-то NULL в onConnected

Я реализую GoogleApiClient как ниже:

 mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, 0 /* clientId */, this)
                .addApi(LocationServices.API)
                .addApi(Places.GEO_DATA_API)
                .addConnectionCallbacks(this)
                .build();

Но в методе onConnected я проверяю mGoogleApiClient = > значение null. В этом случае я пытаюсь перестроить googleApiClient, но я получаю ошибку:

  java.lang.IllegalStateException: Already managing a GoogleApiClient with id 0

Пожалуйста, помогите мне понять, почему mGoogleApiClient иногда NULL, хотя он подключен: |. (Примечания. Я проверил весь исходный код, я никогда не устанавливал для GoogleApiClient значение NULL).

Спасибо!

Обновление

Теперь моя проблема решена после попытки использовать последнюю версию play-сервиса.

Спасибо всем за помощь.

4b9b3361

Ответ 1

У меня была та же проблема. Все, что я сделал для его решения, это удалить .enableAutoManage(this, 0 /* clientId */, this), потому что он просто не работает должным образом из того, что я предполагал. Затем переопределите эти методы в вашей деятельности:

@Override
public void onStart() {
    super.onStart();
    if (mGoogleApiClient != null) {
        mGoogleApiClient.connect();
    }
}

@Override
public void onStop() {
    if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
    super.onStop();
}

Технически, это то, что должен был делать .enableAutoManage(this, 0 /* clientId */, this), за исключением того, что теперь все работает так, как должно.

Ответ 2

Документация говорит: В любой момент времени на один идентификатор допускается только один клиент с автоматическим управлением. Чтобы повторно использовать идентификатор, вы должны сначала вызвать stopAutoManage(FragmentActivity) на предыдущем клиенте.

То, что я лично делаю, это сделать вызов метода ниже, прежде чем я покину его, в котором я использую клиент Google Api.

private void stopAutoManage() {
    if (mGoogleApiClient != null)
        mGoogleApiClient.stopAutoManage(mActivity);
}

Ответ 3

Я думаю, вам лучше посмотреть эту ссылку.

справочная страница "public GoogleApiClient.Builder enableAutoManage"

На этой странице показано, что через IllegalStateException, если clientId уже управляется автоматически. Итак, проверьте свой код с помощью

                .enableAutoManage(this, 0 /* clientId */, this)

Я думаю, что если вы делаете исключение в своем коде, он может вернуть ноль, поскольку он не завершен.

Ответ 4

Если u сталкивается с этой проблемой, когда вы пытаетесь повторно инициализировать mGoogleApiClient, просто удалите

.enableAutoManage(this, 0 /* clientId */, this)

Используйте

mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addApi(Places.GEO_DATA_API)
            .addConnectionCallbacks(this)
            .build();

и он будет работать нормально

Ответ 5

У меня была такая же проблема (уже управляя GoogleApiClient с id 0) в фрагменте, и, наконец, я решил:

  • Переопределить onStart() и onStop обычно
  • Добавить в onStop() этот вызов: "yourApiGoogle".stopAutoManage(контекст);

Иметь хороший день...

Ответ 6

build() немедленно вызывает onConnected, если вы уже подключены. Следовательно, ваша переменная может быть нулевой.

Лучше использовать

mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, 0 /* clientId */, this)
            .addApi(LocationServices.API)
            .addApi(Places.GEO_DATA_API)
            .addConnectionCallbacks(this);
mGoogleApiClient.build();

Ответ 7

mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();

Вот как я это сделал.