私はポストについて多くの質問を持っているが、残念ながら、私は十分に持っていないこのポストにWhat is the simplest and most robust way to get the user's current location on Android?AndroidのGPS位置ヒョードルの道 - 「ビュー階層を作成しただけ元のスレッドがその見解に触れることができる」
に従ってください私は別の投稿を作成する必要があります。ご不便をかけて申し訳ありません。
私のアプリにコードをコピーしてコピーすると、私のSamsung S2で動作しますが、エミュレータ(2.3)では動作しません。
私の質問:エミュレータで実行する場合
、コードがonLocationChanged()メソッドに到達することはありません、代わりにそれは(実行を開始する(タイムアウトはタイマ1によって設定された)20秒間待機します)のGetLastLocation。どうして?
ここで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テレビがMyLocation myLocation = new MyLocation();
とmyLocation.getLocation(this, locationResult);
を呼び出して、私のメインの活動に初期化されます。デザインはポストのデザインと同じです。私はGetLastLocationのrun()が別のスレッドで呼び出されたのだろうか?どうしてこれなの?誰も同じ問題を抱えていますか?
ありがとうございます!
uiコンポーネントの更新は、UIスレッドで行う必要があります。 asynctaskまたはハンドラを使用して、現在のバックグラウンドスレッドからUIスレッドに移動することができます。 –