Android 3.3.1 - Добавление маркеров карты Google из базы данных комнат - PullRequest
0 голосов
/ 24 февраля 2019

у меня есть фрагмент;MapViewFragment, который отображает карту Google.Я хочу добавить маркеры к нему из моей базы данных.Если я пытаюсь добавить маркеры в 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 голосов
/ 24 февраля 2019

Это то, чем я закончил.

Я назвал 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);
    }
}
...