Нет соединения. Вызовите Connect или подождите, пока onConnected() будет вызываться как исключение внутри onConnected?
У меня есть это onConnected
перезвонил для Google LocationClient API
:
@Override
public void onConnected(Bundle arg0) {
if (lc != null) {
lastKnownLocation = lc.getLastLocation();
LocationRequest request = new LocationRequest();
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
request.setFastestInterval(MIN_TIME_BETWEEN_LOCATION_UPDATES);
request.setSmallestDisplacement(MIN_DISTANCE_BETWEEN_LOCATION_UPDATES);
lc.requestLocationUpdates(request, ll);
}
}
И почему-то иногда эта строка:
lastKnownLocation = lc.getLastLocation();
Дает мне это исключение:
java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.
at com.google.android.gms.internal.de.bc()
at com.google.android.gms.internal.ez.a()
at com.google.android.gms.internal.ez$c.bc()
at com.google.android.gms.internal.ey.getLastLocation()
at com.google.android.gms.internal.ez.getLastLocation()
at com.google.android.gms.location.LocationClient.getLastLocation()
at com.citylifeapps.cups.helputils.UserLocation.onConnected(UserLocation.java:115)
at com.google.android.gms.internal.de.aZ()
at com.google.android.gms.internal.de$f.a()
at com.google.android.gms.internal.de$f.a()
at com.google.android.gms.internal.de$b.be()
at com.google.android.gms.internal.de$a.handleMessage()
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(NativeStart.java)
Я действительно не могу понять, почему это происходит. Очевидно, я пытаюсь получить последнее известное местоположение, используя LocationClient
после запуска метода подключения и ожидания onConnected
обратный вызов и, как я понимаю, onConnected
перезвонить называется, когда у меня есть соединение, так как я могу получить "Not connected ..."
исключение? Кто-нибудь знает?
Благодарю.
4 ответа
Может, как и я, вы вообще не вызывали connect(). Попробуйте с вызовом, включенным в метод onStart:
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
Немного опоздал на вечеринку, но на всякий случай кто-то тоже наткнулся на эту проблему. В моем случае я получил то же сообщение об ошибке, что и Эмиль. После некоторой отладки я заметил, что (в моем конкретном коде) я дважды вызывал mLocationClient.connect(), второй раз с небольшой задержкой прибл. 100 миллисекунд Я считаю, что первый вызов вызвал обратный вызов onConnect(), но затем второй вызов connect () разорвал соединение.
Решение в моем случае состояло в том, чтобы проверить перед подключением, если соединение еще не установлено, аналогично тому, как расширенный диапазон предлагает это выше. Я не уверен, почему Google отключает mLocationClient при повторном вызове connect (), но в моем случае это решило проблему.
if (!mLocationClient.isConnected() && !mLocationClient.isConnecting()){
mLocationClient.connect();
}
У меня та же проблема на Samsung S4 и S3 mini.
Просто оберните с помощью get /catch getLastLocation() и начните получать фактическое местоположение из RequirstLocationUpdate:
@Override
public void onConnected(Bundle arg0) {
if (lc != null) {
try{
lastKnownLocation = lc.getLastLocation();
catch(Exception ex){ /* log error */ }
LocationRequest request = new LocationRequest();
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
request.setFastestInterval(MIN_TIME_BETWEEN_LOCATION_UPDATES);
request.setSmallestDisplacement(MIN_DISTANCE_BETWEEN_LOCATION_UPDATES);
lc.requestLocationUpdates(request, ll);
}
}
Я попробовал это:
@Override
public void onConnected(Bundle arg0) {
Log.w(TAG, "onConnected");
if (!mLocationClient.isConnecting()) {
mLocationClient.getLastLocation();
}
}
Пока что у меня все работает, но я абсолютно не знаю, почему.