0

まず、LocationManager は既に非 UI ブロッキングであるため、AsyncTask で呼び出す必要がないことを知っています :)

1. ユーザーの現在の場所を取得する 2. Web サービスを呼び出して、その場所周辺の特定の POI のリストを取得するアクティビティがあります。

ユーザーは、TabActivity を使用して結果をマップまたはリストとして表示することを選択できます。これを念頭に置いて、ユーザーの位置を取得し、Web サービスを呼び出すための AsyncTask は、ドッキングされたビューではなく、TabActivity ビューによって管理されます。

したがって、最初にユーザーの場所を取得してから Web サービスを呼び出す AsyncTask を TabActivity で開始する必要があります。進行状況ダイアログにより、このプロセス中にタブを使用してビューを切り替えることができなくなります。

AsyncTask からユーザーの場所を取得する以外は、ほとんどすべてが機能しています。Web サービス コードが記述され、マッピングとオーバーレイ コードが記述され、タスク進行状況ダイアログが向きの変更に対応します。

場所の焦点は、正確さよりも速度です。ユーザーがマップビューで結果を表示することを選択した場合、より正確な位置を取得できるようにする「現在地」ボタンを提供します。最初に大まかな場所を取得し、検索結果をすばやく返したいだけです。

多分私はこれについて間違った方法で行っています。マップ ビューを表示し、マップ アクティビティで現在の場所を見つけてから、非同期で Web サービスだけを呼び出す必要があるかもしれませんが、ユーザーが場所のフェーズでリスト ビュー タブをタップするとどうなるでしょうか。また、ユーザーがデフォルトのビューを指定できるようにするつもりでした。地図よりもリストを好む人もいるかもしれません。この場合、場所を取得する必要があるリストビューがあります。

マーティンさん、アドバイスありがとうございます。

4

1 に答える 1

0

私はそれを疑った。私が抱えていた問題は、AsyncTask で LocationListener が呼び出されていないことでした。その理由は、スレッドで lopper を作成して準備したにもかかわらず、 Looper.Loop() を呼び出していなかったからです。

requestLocationUpdates を開始し、タイマーを開始します。locationmanager が場所で応答するか、タイマーが期限切れになります。この時点で looper.quit() を呼び出して、物事が正常に戻ることを確認します。

動作しているようです。AsyncTask がキャンセルされた場合は、タイマーとルーパーをキャンセルして、戻るボタンなどに応答することも忘れないでください。

于 2011-05-08T07:37:27.267 に答える