Android 3.3.1-从房间数据库中添加Google地图标记

时间:2019-02-23 22:14:33

标签: android android-asynctask google-maps-markers

我有一个片段;显示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);
    }
}

1 个答案:

答案 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);
    }
}