按下时我的按钮 - 检查GPS是否打开,以及何时打开执行方法:
GoogleApiClient.connect();
然后获取最后一个已知位置。
当GPS关闭时,程序会要求您这样做。
该程序有效,但我发现其中有错误,我不知道如何修复它。
当我打开GPS并且大约一秒钟后我按下程序工作的按钮,但是当我打开GPS时,然后快速(我认为它不到1秒)点击按钮这个程序关闭并收到消息:
java.lang.ClassCastException: ru.xxxxx_myapp.MapsActivity cannot be cast to com.google.android.gms.location.LocationListener
答案 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);
}
我的手机显示蓝屏然后再次出现同样错误的按钮