0

Google マップを使用して、デバイスの最後の既知の場所にカスタム マーカーを配置する基本的なアプリがあります。ロケーション クライアントによってスローされる Illegal State Exception が原因で、アプリが頻繁にクラッシュします。

java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.

これは通常、Asynctask が終了し、新しい情報でマップの更新を呼び出したが、アクティビティを一時停止したために中断された場合に発生します。更新を試みる前に、クライアントが接続されているかどうかを判断するために、単純なブール値チェックを設定しようとしました。

if (servicesConnected() && locClientConnected)  {
        loc = lClient.getLastLocation();
//code to draw circle
}

ただし、これは ANR/クラッシュには影響しないように思われるため、アクティビティがアクティブな間に実行されますが、これが呼び出される前にほとんど完了していません。

protected void onPause()    {
    lClient.disconnect();
    super.onPause();
}

ここで切断を削除し、完了できるようにすることをお勧めしますか? またはそれは違いを生むでしょうか?誰かが Location クライアントでこの問題に遭遇したことを願っています。:)

4

1 に答える 1

0

可能な解決策:

  1. この動作を回避するには、AsyncTask の代わりにローダーを使用します。
  2. 抽選前にアクティビティの状態をチェック

    void onPause(){
        allowDraw = false;
        ...
    }
    
    void onResume(){
        allowDraw  = true;
        ...
    }
    
    if (servicesConnected() && locClientConnected && allowDraw)  {
        loc = lClient.getLastLocation();
        //code to draw circle
    }
    
  3. try catch ブロックを使用してください :)

于 2014-07-16T07:38:16.263 に答える