0

当我的 Android 应用程序首次启动时(随后每 15 秒),我需要更新地图(使用 Google Maps API V2)。

坐标是从 REST WebService 中获取的,我可以从中获取数据(有一个带有监听器的按钮,每次按下它都会调用 Web 服务并在 Toast 上显示数据)。

我的问题是我不知道如何将数据传递给地图本身(需要显示带有收集位置的标记),因为我在 AsyncTask 中实现了 WebService 调用。

现在我有一个 MainActivity,里面有一个 MapFragment。理想情况下,应用程序将获取数据并更新 MapFragment 上的所有标记。

所以我的问题是:

如何从 AsyncTask 中获取数据?我想,一旦我能得到数据,我就知道如何填充地图了..

我最初的想法是在我的 Main Activity 的 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 中doInBackground,从 webservice 获取标记数据填充标记对象的 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从中获取一一标记数据markerArrList并显示在map

希望这对您有所帮助。

于 2013-03-27T15:44:32.247 回答