Как правильно передать координаты в Google Maps?

247
12 декабря 2017, 19:04

Пытаюсь геокодировать адрес переменной adr в координаты с долготой и шириной и отобразить метку на карте. Запускаю приложение. В текстовое поле высчитанные координаты adr заносятся, но на карте маркер ставится в значение (0,0). Я так понимаю функция onMapReady срабатывает раньше, чем высчитываются координаты, поэтому заносятся по умолчанию (0,0) (если их убрать приложение вовсе вылетает). Как правильно реализовать передачу высчитанных координат в эту функцию?

`public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

//Button btnShowCoord;
//EditText edtAddress;
TextView txtCoord;
private GoogleMap mMap;
String lat1 = "0", lng1 = "0";
String adr = "проспект Маршала Жукова 24";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new GetCoordinates().execute(adr.replace(" ","+"));
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    //btnShowCoord = (Button) findViewById(R.id.btnShowCoordinates);
    //edtAddress = (EditText) findViewById(R.id.edtAddress);
    txtCoord = (TextView) findViewById(R.id.txtCoordinates);
}
private class GetCoordinates extends AsyncTask<String,Void,String> {
    ProgressDialog dialog = new ProgressDialog(MainActivity.this);
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog.setMessage("Please wait....");
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    }
    @Override
    protected String doInBackground(String... strings) {
        String response;
        try{
            String address = strings[0];
            HttpDataHandler http = new HttpDataHandler();
            String url = String.format("https://maps.googleapis.com/maps/api/geocode/json?address=%s",address);
            response = http.getHTTPData(url);
            return response;
        }
        catch (Exception ex)
        {
        }
        return null;
    }
    @Override
    protected void onPostExecute(String s) {
        try{
            JSONObject jsonObject = new JSONObject(s);
            String lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0).getJSONObject("geometry")
                    .getJSONObject("location").get("lat").toString();
            String lng = ((JSONArray)jsonObject.get("results")).getJSONObject(0).getJSONObject("geometry")
                    .getJSONObject("location").get("lng").toString();
            lat1 = lat;
            lng1 = lng;
            txtCoord.setText(String.format("Coordinates : %s / %s ",lat,lng));
            if(dialog.isShowing())
                dialog.dismiss();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(Double.parseDouble(lat1), Double.parseDouble(lng1));
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}}`
Answer 1

У вас lat1 и lng1 инициализируются позже, чем вы их сетите. Т.е. onMapReady() срабатывает раньше чем onPostExecute()

Вызывайте new GetCoordinates().execute(adr.replace(" ","+")); в методе onMapReady()

И Эти строки

LatLng sydney = new LatLng(Double.parseDouble(lat1), Double.parseDouble(lng1));
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

должны быть в onPostExecute()

READ ALSO
как инициализировать 5-ти мерный массив?

как инициализировать 5-ти мерный массив?

Привет! Есть простой массив Object[] arr = new int[50] заполненный некими значениями, также есть другой массив Object[][][][][] fiveDArr, правда он 5-ти мерный, нужно...

259
Чем отличается List от ArrayList?

Чем отличается List от ArrayList?

Чем отличается List от ArrayListПогуглил, но толком ничего не нашел (как минимум, на русском языке)

277
форма &lt;input type=&ldquo;datetime-local&rdquo;&gt;

форма <input type=“datetime-local”>

Подскажите пожалуйста как можно сделать что б в datetime-local всегда выдавался 24 часовой пояс либо как можно его заменить либо хотя бы изменить...

246