Я хочу отобразить свой массив, заполненный координатами, которые у меня есть в моей MainActivity на картах Google в моей деятельности карт Google. Как я могу сделать это самым простым способом? Мой цикл for для получения данных JSON:

for (int j = 0; j <= 10; j++) {
JSONObject marker = placemarks.getJSONObject(j);
JSONArray coordinates = marker.optJSONArray("coordinates");
double lat = coordinates.optDouble(0);
double lng = coordinates.optDouble(1);
latlongList.add(new LatLng(lat, lng));
}

Моя текущая активность в картах Google:

public class CarLocation extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_car2_go_location);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);


    }


    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {

        MainActivity mainActivity = new MainActivity();

        mMap = googleMap;
        // Add a marker in Hamburg and move the camera
        LatLng hamburg = new LatLng(53.551086, 9.993682);
        mMap.addMarker(new MarkerOptions().position(hamburg).title("Marker in Hamburg"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(hamburg));

    }
}
0
Jade 15 Апр 2016 в 12:51

2 ответа

Лучший ответ

Я не тестировал этот код, но чтобы понять, как это сделать, вы можете следовать.

Я упоминал в своем комментарии выше, вместо того, чтобы отправлять весь список между активностями (в вашем случае от MainActivity до CarLocation activity), лучше обернуть весь процесс (получение json и отображение маркеров) в методе и использовать.

DisplayMarkersTask asynctask выбирает и отображает маркеры.

public class CarLocation extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    private List<Marker> markers = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_car2_go_location);

        SupportMapFragment mapFragment = 
            (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        Send parameter if needed
        String param = .... 
        new DisplayMarkersTask(param).execute();
    }

    private static class DisplayMarkersTask extends AsyncTask<String, Void, ArrayList<LatLng>> {

        private WeakReference<CarLocation> mActivityRef;
        public DisplayMarkersTask(CarLocation activity){
            mActivityRef = new WeakReference<>(activity);
        }

        @Override
        protected ArrayList<LatLng> doInBackground(String... params) {
            Take parameter if needed
            String param = params[0];
            ....
            Fetch your json here

            ArrayList<LatLng> latlongList = new ArrayList<>();
            for (int j = 0; j <= 10; j++) {
                JSONObject marker = placemarks.getJSONObject(j);
                JSONArray coordinates = marker.optJSONArray("coordinates");
                double lat = coordinates.optDouble(0);
                double lng = coordinates.optDouble(1);
                latlongList.add(new LatLng(lat, lng));
            }
            return latlongList;
        }

        @Override
        protected void onPostExecute(ArrayList<LatLng> list) {
            CarLocation activity = mActivityRef.get();
            if(activity == null){
                return;
            }

            for (int j = 0; j <= list.size(); j++) {
                LatLng position = list.get(j);
                Marker marker = activity.mMap.addMarker(
                    new MarkerOptions().position(position));

                activity.markers.add(marker);
            }
        }
    }
}
2
blackkara 15 Апр 2016 в 12:23

Вот ссылка для добавления маркера https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/src/main/java/com/example/mapdemo/MarkerDemoActivity.java

0
Shaan_B 15 Апр 2016 в 10:17