我需要在我的Android应用程序首次启动时(以及随后每15秒)更新一次Map(使用Google Maps API V2)。
从REST WebService获取坐标,我可以从中获取数据(有一个带有监听器的按钮,每次按下时都会调用webservice,并在Toast上显示数据)。
我的问题是我不知道如何将数据传递给地图本身(需要显示带有聚集位置的标记),因为我在AsyncTask中实现了WebService调用。
现在我有一个MainActivity,里面有一个MapFragment。理想情况下,应用程序将获取数据并更新MapFragment上的所有标记。
所以我的问题是:
如何从AsyncTask获取数据?我认为,一旦我能获得数据,我就知道如何填充地图..
我最初的思考过程是在我的Main Activity的onCreate()方法中调用AsyncTask,并在该方法内部调用另一个启动map的方法,从AsyncTask传递值。
答案 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
希望这会对你有所帮助。