0

更新:pLatOld = pLatを設定する前に計算を追加しましたが、再開後にpLatOldの古い値と新しい値を使用しているものもあります。それらはすべて、アクティビティが最初に実行されるときに使用する古い値を使用する必要があります。Mathクラスコードが誤った値を使用しているようですが、アクティビティが再開された後でのみです。ストレートインラインコードは正しい値を使用しています。コード内の他のすべてが実行された後に古いものから新しいものへの更新を行う方法はありますか?

Googleとstackoverflowで実行順序を検索しました。ほとんどの応答は並列スレッドを扱いますが、これは線形コードであるため、はるかに単純な問題であり、私は困惑しています。デバッグを簡素化するために、以下の例のコードを削除しました。通常、私はpLatの設定とpLatOldの更新の間で、これらの読み取り値の違いに応じて計算を行います。最初は正常に機能しますが、再開後は前の値も新しい値になるため、計算では距離が0になります。

    @Override
    public void onLocationChanged(Location location) {
        if (location != null)
        {
            pLat = location.getLatitude();
            textData = (TextView)findViewById(R.id.textData);
            DecimalFormat df = new DecimalFormat("#.########");
            textData.setText(
                    "Lat " + df.format(pLat) 
                    +"\npLatOld " + df.format(pLatOld)
                    );
            pLatOld = pLat;
        }
    }

初めて38を入力し、続いて38.1を入力すると、これが出力として取得される可能性があります。

Lat 38.1
pLatOld 38

正解です。

しかし、私がページを離れて戻って同じことをすると、私は得ます

Lat 38.1
pLatOld 38.1

これは間違っています。

つまり、pLatOld = pLatは、その前のコードの前で実行されているように見えます。

ダミー計算を追加してみたので、コンパイラは、設定後にpLatOldを使用していることを認識しますが、喜びはありません。

4

1 に答える 1

0

あなたが初めてpLatOld = pLat;実行されると、 ispLatOldからその値が取得されます。pLat38.1

したがって、後で実行される場合、出力はそのまま期待されます。

于 2012-07-15T16:29:53.733 に答える