android - Android 3.3.1 - 从房间数据库中添加谷歌地图标记
问题描述
我有一个片段;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);
}
}
解决方案
这就是我最终的结果。
我在这里调用了 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);
}
}
推荐阅读
- machine-learning - 为什么内核过滤器中有这么多负值?
- c - 如何使用 scanf() 读取包含许多列跳过其中一些列的文件 (.txt)
- python - 如何将实体关系从 corenlp 转换为本体?
- wpf - 使用依赖属性在 ControlTemplate 触发器中设置值
- java - 如何在测试结果列 Extent HTML 报告中将 TestNg“dependsOnMethods”显示为单独的节点
- here-api - HERE API - 地点 ID
- php - 在woocommerce中将类别品牌添加到产品标题
- firebase - Firebase 托管重写设置为将所有其他 URL 传递给特定的 Cloud Functions
- google-maps - Google Places API 文本搜索无法正确过滤地址
- android - 我如何在 react-native 上打开我的 rtmp 流