我有一个片段;显示Google地图的MapViewFragment。我想从我的数据库中添加标记。如果我尝试在onMapReady中添加标记,则会收到我在主线程上的错误消息。如果尝试添加如下所示的标记,则会出现错误,提示我不在主线程上添加标记。如何获取列表并将标记添加到地图?
private class InsertMarkersAsyncTask extends AsyncTask<Void,Void,Void> {
private InsertMarkersAsyncTask() {
}
@Override
protected Void doInBackground(Void... voids) {
//TODO: This needs work
List<Site> sites = SiteDatabase.getInstance(getContext()).siteDAO().loadSites();
for (int i = 0; i < sites.size(); i++) {
String[] siteLatLng = String.valueOf(sites.get(i).getLatlng()).split(",");
Double[] doubleLatLng = new Double[2];
doubleLatLng[0] = Double.parseDouble(siteLatLng[0]);
doubleLatLng[1] = Double.parseDouble(siteLatLng[0]);
LatLng current = new LatLng(doubleLatLng[0], doubleLatLng[1]);
mMap.addMarker(new MarkerOptions().position(current).title(sites.get(i).getSiteName()));
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}
答案 0 :(得分:-1)
这就是我最终的结果。
我在这里叫AsyncTask ...
new InsertMarkersAsyncTask().execute();
此处异步设置...
private class InsertMarkersAsyncTask extends AsyncTask<Void,Object,Void> {
private InsertMarkersAsyncTask() {
}
@Override
protected Void doInBackground(Void... voids) {
List<Site> sites = SiteDatabase.getInstance(getContext()).siteDAO().loadSites();
LatLng current;
for (int i = 0; i < sites.size()-1; i++) {
String[] siteLatLng = String.valueOf(sites.get(i).getLatlng()).split(",");
Double[] doubleLatLng = new Double[2];
doubleLatLng[0] = Double.parseDouble(siteLatLng[0]);
doubleLatLng[1] = Double.parseDouble(siteLatLng[1]);
current = new LatLng(doubleLatLng[0], doubleLatLng[1]);
publishProgress(sites.get(i), current);
}
return null;
}
@Override
protected void onProgressUpdate(Object... values) {
super.onProgressUpdate(values);
Site site = (Site) values[0];
LatLng current = (LatLng) values[1];
mMap.addMarker(new MarkerOptions().position(current).title(site.getSiteName()));
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}