Пытаюсь геокодировать адрес переменной 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));
}}`
У вас 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()
Виртуальный выделенный сервер (VDS) становится отличным выбором
Привет! Есть простой массив Object[] arr = new int[50] заполненный некими значениями, также есть другой массив Object[][][][][] fiveDArr, правда он 5-ти мерный, нужно...
Чем отличается List от ArrayListПогуглил, но толком ничего не нашел (как минимум, на русском языке)
Подскажите пожалуйста как можно сделать что б в datetime-local всегда выдавался 24 часовой пояс либо как можно его заменить либо хотя бы изменить...