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-сервиса.
Спасибо всем за помощь.
Ответы
Ответ 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();
Вот как я это сделал.