Android 3.3.1 - 从房间数据库添加谷歌地图标记

问题描述 投票:0回答: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);
    }
}
android android-asynctask google-maps-markers
1个回答
-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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.