Android - 获取Web服务数据以在应用程序启动时更新Map

时间:2013-03-27 13:57:20

标签: android google-maps

我需要在我的Android应用程序首次启动时(以及随后每15秒)更新一次Map(使用Google Maps API V2)。

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

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

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

所以我的问题是:

如何从AsyncTask获取数据?我认为,一旦我能获得数据,我就知道如何填充地图..

我最初的思考过程是在我的Main Activity的onCreate()方法中调用AsyncTask,并在该方法内部调用另一个启动map的方法,从AsyncTask传递值。

1 个答案:

答案 0 :(得分: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()。 取消timer中的onDestroy()

现在YourAsynchTask()调用doInBackground中的webservice,从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

希望这会对你有所帮助。