-1

Here:Async and ListView Android

I asked about Async and Listview. Now I have a problem with Async and Maps. I want to set a marker with JSON that returns Async. Unfortunately, I set the default values and those that do not want to. You can help

public class MarkerInfo extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private LatLng sydney;
private String longituide;
private String latitude;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_marker_info);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    Bundle bundle_list = getIntent().getExtras();
    final String name_item = bundle_list.getString("name");

    JSONObject toSend = new JSONObject();
    try {
        toSend.put("action", "getAllMarkers");
    } catch (JSONException e) {
        e.printStackTrace();
    }

    JSONTransmitter asyncTask = (JSONTransmitter) new JSONTransmitter(new JSONTransmitter.AsyncResponse() {
        @Override
        public void processFinish(String output) {
            try {
                JSONArray pages = new JSONArray(output);
                for (int i = 0; i < pages.length(); ++i) {
                    JSONObject rec = pages.getJSONObject(i);
                    String name_task = rec.getString("nazwa");
                    latitude = rec.getString("latitude");
                    longituide = rec.getString("longitude");
                    mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(longituide), Double.parseDouble(latitude))));
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    }).execute(toSend);
}

public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
}

}

Community
  • 1
  • 1
Pietrov
  • 23
  • 6

1 Answers1

0

Execute your async map dependent operation (adding markers), after google map ready.

JSONTransmitter asyncTask;
GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...

    mapFragment.getMapAsync(this);

    asyncTask = (JSONTransmitter) new JSONTransmitter(new JSONTransmitter.AsyncResponse() {
        @Override
        public void processFinish(String output) {
            try {
                JSONArray pages = new JSONArray(output);
                for (int i = 0; i < pages.length(); ++i) {
                    JSONObject rec = pages.getJSONObject(i);
                    String name_task = rec.getString("nazwa");
                    latitude = rec.getString("latitude");
                    longituide = rec.getString("longitude");
                    mMap.addMarker(new MarkerOptions().position(
                       new LatLng(Double.parseDouble(longituide), Double.parseDouble(latitude))));
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
}

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

    JSONObject toSend = new JSONObject();

    try {
        toSend.put("action", "getAllMarkers");
    } catch (JSONException e) {
        e.printStackTrace();
    }

    asyncTask.execute(toSend);
}
blackkara
  • 4,900
  • 4
  • 28
  • 58