0

私はこのバグを探して2日間働いています。stackoverflow と Android のドキュメントを検索しましたが、うまくいきませんでした。

私の onLocationChanged コードには、呼び出された回数をカウントするカウンターがあり、電話のアクティビティ画面から矢印を戻して戻ると、更新ごとにカウンターが 2 ずつ上がります。矢印を戻して GPS を更新すると、画面がバックグラウンドにあり、onPause が呼び出されていても、カウンターは onLocationChanged がまだ呼び出されていることを記録します。戻る矢印でアクティビティに出入りすると、アクティビティ画面に入った回数に応じて、GPS 入力の送信ごとに 2 つ以上の更新を取得できます。

すべての GPS コードは機能しますが、これらの複数のインスタンスは適切ではなく、2 つの更新間の移動距離など、私がやろうとしている他のことを台無しにします。

これが私のコードの関連部分だと思うものです。明らかに主要部分は省略しましたが、ポイントは、バックアローアウト後にこの画面に戻った後、GPSデータポイントを1回送信すると、画面に戻った回数に応じてn変数が1以上増加することです.

私は明らかなことをしているに違いありませんが、それを見つけることができません。

public class Data extends Activity {


protected LocationListener ll;
protected LocationManager lm;
static int n = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.data);
    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener ll = new mylocationlistener();
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
}


    class mylocationlistener implements LocationListener{
        @Override
        public void onLocationChanged(Location location) {
            if (location != null){
                n = n + 1;
                                    textData.setText("\n" + n);
                            }
     }

        @Override
    protected void onPause() {
        if(lm != null) {
            lm.removeUpdates(ll);
        }
        ll = null;
        lm = null;
        super.onPause();
    }

私が持っている唯一の手がかりは、if(lm != null) から lm.removeUpdates(ll) を取り出すと、コードがクラッシュして、lm が null でなければならず、lm.removeUpdates(ll) がそうでないと思わせることです。正しいですが、私が知る限り、見つけることができるすべての例と Android のドキュメントと一致します。

助けてください。

4

1 に答える 1

3
  LocationListener ll = new mylocationlistener();

これLocationListenerはメソッド onCreate() に対してローカルです。LocationManager lm.So も同様です。更新を削除すると、クラス変数として宣言したマネージャーとリスナーが機能しません。のように書くだけ

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll = new mylocationlistener(); in your onCreate().
于 2012-07-16T03:37:01.007 に答える