打开GPS时快速按下按钮后出错

时间:2016-10-23 20:50:42

标签: java android google-maps

按下时我的按钮 - 检查GPS是否打开,以及何时打开执行方法:

GoogleApiClient.connect();

然后获取最后一个已知位置。

当GPS关闭时,程序会要求您这样做。

该程序有效,但我发现其中有错误,我不知道如何修复它。

当我打开GPS并且大约一秒钟后我按下程序工作的按钮,但是当我打开GPS时,然后快速(我认为它不到1秒)点击按钮这个程序关闭并收到消息:

java.lang.ClassCastException: ru.xxxxx_myapp.MapsActivity cannot be cast to com.google.android.gms.location.LocationListener

2 个答案:

答案 0 :(得分:1)

这似乎是由于在上一次通话完成连接之前多次调用GoogleApiClient.connect()而造成的。

我认为发生了类似的事情:

1)' Connect'按下按钮(或调用按钮的任何按钮) 2)调用GoogleApiClient.connect()。然后开始在另一个线程上连接到API 3)虽然之前对connect()的呼叫仍在进行中,但是“连接”#39;再次按下按钮 4)再次调用GoogleApiClient.connect(),因此再次开始连接过程,导致GoogleApiClient混淆并抛出异常。

虽然我无法肯定地说为什么你正在获得ClassCastException,但我很可能会说这很可能是问题的原因。

因此,要解决此问题,请在按钮事件处理代码(您调用GoogleApiClient.connect()的地方)中进行检查,以确定客户端当前是连接还是已连接,如果是这样,那么再次尝试连接,直到客户端断开连接。

您需要与按钮事件处理代码类似的内容:

public void onClick(){
    // If the client is not trying to connect and is not currently connected,
    // then start connecting
    if(!GoogleApiClient.isConnecting() && !GoogleApiClient.isConnected()){
        GoogleApiClient.connect();
    }
}

我希望这会有所帮助。

答案 1 :(得分:0)

我在

上换了ONLY_FULL_GROUP_BY
GoogleApiClient.connect()

仍然有同样的错误:(

方法if(!GoogleApiClient.isConnecting() && !GoogleApiClient.isConnected()){ GoogleApiClient.connect(); 我有:

public void onConnected(Bundle bundle)

也许出了什么问题? 我认为如果方法执行延迟,这将有效,但我不知道该怎么做。

我是这么认为的,因为在交换时:

 if (location == null)
{
    LocationServices.FusedLocationApi.requestLocationUpdates(GoogleApiClient, LocationRequest, (LocationListener) this);
}

 if (location == null)
{
    LocationServices.FusedLocationApi.requestLocationUpdates(GoogleApiClient, LocationRequest, (LocationListener) this);
}

我用这个&#34来快速点击"打开手机中的GPS并快速点击 if (location == null) { makeMyScreenBlue(); LocationServices.FusedLocationApi.requestLocationUpdates(GoogleApiClient, LocationRequest, (LocationListener) this); } 我的手机显示蓝屏然后再次出现同样错误的按钮