0

Androidアプリケーションが最初に起動したとき(その後は15秒ごと)に(Google Maps API V2を使用して)マップを更新する必要があります。

座標はRESTWebサービスからフェッチされ、そこからデータを取得できます(リスナーが押されるたびにWebサービスを呼び出し、トーストにデータを表示するボタンがあります)。

私の問題は、AsyncTaskにWebService呼び出しが実装されているため、データをマップ自体に渡す方法がわからないことです(収集された場所でマーカーを表示する必要があります)。

現在、MapFragmentを含むMainActivityがあります。理想的には、アプリケーションはデータを取得し、MapFragment上のすべてのマーカーを更新します。

だから私の質問は:

AsyncTaskからデータを取得するにはどうすればよいですか?データを取得できたら、地図にデータを入力する方法がわかったと思います。

私の最初の思考プロセスは、メインアクティビティのonCreate()メソッドでAsyncTaskを呼び出し、そのメソッド内で、マップを開始する別のメソッドを呼び出して、AsyncTaskから値を渡すことです。

4

1 に答える 1

3

最初に15秒で地図を更新するには、次のようにタイマーでAsynchTaskを呼び出します。

public void AsynchTaskTimer() {
    final Handler handler = new Handler();
    Timer timer = new Timer();
    TimerTask timer = new TimerTask() {       
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {       
                    try {
                        new YourAsynchTask().execute();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                    }
                }
            });
        }
    };
    timer.schedule(timer, 0, 15000); //execute in every 15sec
} 

呼び出しAsynchTaskTimer()ますonCreate()。でキャンセルtimeronDestroy()ます。

ここで、のYourAsynchTask()webserviceを呼び出して、webservicedoInBackgroundからマーカーデータを取得し、マーカーオブジェクトのArrayListに入力し、マーカーを表示するメソッドにマーカーオブジェクトのArrayListを渡します。このような

    private class YourAsynchTask extends AsyncTask<String, Void, Integer> {
   ArrayList<MarkerObject> markerArrList= new ArrayList<MarkerObject>();
markerArrList.clear();
            @Override
            protected void onPreExecute() {
                progressDialog = ProgressDialog.show(YourMapFragActivity.this, "Wait...",
                        "Loading");
                progressDialog.setMessage("Please Wait");
                progressDialog.show();
                super.onPreExecute();
            }

            @Override
            protected Integer doInBackground(String... params) {
                markerArrList=getMapMarkerDataFromWebservice();
                return 1;
            }

            @Override
            protected void onPostExecute(Integer result) {
                super.onPostExecute(result);
                showMarkerLocationOnMap(markerArrList);
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                }
            }
        }

showMarkerLocationOnMapから1つずつマーカーデータを取得してmarkerArrList表示しますmap

これがお役に立てば幸いです。

于 2013-03-27T15:44:32.247 に答える