私はこの投稿に従いますAndroid でユーザーの現在の場所を取得する最も簡単で最も堅牢な方法は何ですか?
投稿について多くの質問がありますが、残念ながらそこに返信するほどの評判がないため、別の投稿を作成する必要があります。ご不便をかけて申し訳ありません。
コードをコピーしてアプリに貼り付けると、Samsung S2 では動作しますが、エミュレーター (2.3) では動作しません。
私の質問:
エミュレーターで実行すると、コードが onLocationChanged() メソッドに到達することはなく、代わりに 20 秒 (timer1 によって設定されたタイムアウト) 待機して GetLastLocation の run() を開始します。なんで?
これで、GetLastLocation クラスの run() メソッドが常に呼び出され、上記の例外が発生しました。
(E/AndroidRuntime(436): android.view.ViewRoot$CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。)
私のコードでエラーが発生すると思います:
public LocationResult locationResult = new LocationResult()
{
@Override
public void gotLocation(final Location location)
{
Log.i(LOG_TAG, "gotLocation");
if (location == null)
{
Log.i(LOG_TAG, "Cannot get location");
}
else
{
Log.i(LOG_TAG, "Lat: " + location.getLatitude() + " Long:" + location.getLongitude());
tv = (TextView) findViewById(R.id.my_text); // <<< error here!!!
tv.setText(lat + "," + lon);
}
}
};
TextView tv は、MyLocation myLocation = new MyLocation();
andを呼び出すメイン アクティビティで初期化されますmyLocation.getLocation(this, locationResult);
。ポストと同じデザインです。別のスレッドで GetLastLocation の run() が呼び出されているのだろうか? どうしてこれなの?誰かが同じ問題を抱えていますか?
どうもありがとう!