【问题标题】:Not connected. Call Connect or wait for onConnected() to be called exception inside onConnected?未连接。调用 Connect 或等待 onConnected() 在 onConnected 中被调用异常?
【发布时间】:2014-05-26 19:28:54
【问题描述】:

我为Google LocationClient API 实现了这个onConnected 回调:

@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)

我真的不明白为什么会这样。显然,在运行连接方法并等待onConnected 回调之后,我正在尝试使用LocationClient 获取最后一个已知位置,据我所知,当我有连接时会调用onConnected 回调,那么我该怎么做得到"Not connected ..." 异常? 有人知道吗?

谢谢。

【问题讨论】:

  • 你知道这里发生了什么吗?
  • 嗨,Emil Adz,您解决了这个问题吗?最近两天我也面临同样的问题。如果你解决了,请帮助我如何解决这个问题

标签: android location google-client


【解决方案1】:

也许像我一样,你根本没有调用 connect()。尝试使用 onStart 方法中包含的调用:

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

【讨论】:

  • 是的。 Android doc 忘了提到你应该连接。 TT_TT
  • 这是绝对正确的,但在 Android 文档中仍未得到纠正。遵循 1:1 的教程会让你失望!
【解决方案2】:

我在三星 S4 和 S3 mini 上遇到了同样的问题。

只需使用 try/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);
    }
}

【讨论】:

  • 不,没那么简单,用 try 和 catch 包裹这一行可能会消除崩溃,但我的很多用户抱怨位置检测问题。所以这并不能解决我的问题。
  • 通常它只在获取最后一个位置时崩溃,但您可以获得实际位置。
【解决方案3】:

我试过了:

@Override
public void onConnected(Bundle arg0) {
    Log.w(TAG, "onConnected");
    if (!mLocationClient.isConnecting()) {
        mLocationClient.getLastLocation();
    }
}

到目前为止,它对我来说效果很好,但我完全不知道为什么。

【讨论】:

    【解决方案4】:

    聚会有点晚了,但以防万一有人也遇到这个问题。就我而言,我收到了与 Emil 相同的错误消息。经过一些调试后,我注意到(在我的特定代码中)我调用了 mLLocationClient.connect() 两次,第二次延迟了大约。 100 毫秒。我相信第一次调用导致 onConnect() 回调被触发,但随后第二次 connect() 调用中断了连接。

    在我的情况下,解决方案是在连接之前进行检查,如果还没有连接,就像上面扩展范围所建议的那样。我不确定 Google 为什么会在重复的 connect() 调用中断开 mLLocationClient,但在我的情况下它解决了问题。

    if (!mLocationClient.isConnected() && !mLocationClient.isConnecting()){
        mLocationClient.connect();
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2016-05-19
      • 2014-04-13
      • 2013-12-14
      • 1970-01-01
      • 2019-07-07
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多