Кто-нибудь может мне помочь, это мой код прослушиватель кликов на карте Google не работает. Этот мой код, пожалуйста, помогите мне, что мне не хватает. Когда я запускаю приложение, приложение делает cra sh и показывает Исключение нулевой точки в прослушивателе onclick карты Google. Пожалуйста, помогите мне, я хочу реализовать, когда пользователь зашел на карту, затем нажмите на карту и получите адрес этого места
public class WeatherMap extends FragmentActivity implements GoogleMap.OnMapClickListener, OnMapReadyCallback, GoogleMap.OnMapLongClickListener {
GoogleMap Map;
MarkerOptions markerOptions;
LatLng latLng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_weather_map);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment supportMapFragment = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.mapw);
// supportMapFragment.getMapAsync((OnMapReadyCallback) this);
// Getting a reference to the map
supportMapFragment.getMapAsync((OnMapReadyCallback) this);
// googleMap = supportMapFragment.getMap();
// googleMap = supportMapFragment.getMap();
// Setting a click event handler for the map
// googleMap.setOnMapClickListener(this);
Map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng ar) {
latLng = ar;
// Clears the previously touched position
Map.clear();
// Animating to the touched position
Map.animateCamera(CameraUpdateFactory.newLatLng(latLng));
// Creating a marker
markerOptions = new MarkerOptions();
// Setting the position for the marker
markerOptions.position(latLng);
// Placing a marker on the touched position
Map.addMarker(markerOptions);
// Adding Marker on the touched location with address
new ReverseGeocodingTask(getBaseContext()).execute(latLng);
}
});
}
@Override
public void onPointerCaptureChanged(boolean hasCapture) {
}
@Override
public void onMapReady(GoogleMap googleMap) {
Map=googleMap;
googleMap.setOnMapClickListener(this);
}
@Override
public void onMapClick(LatLng ar) {
// latLng = ar;
// Toast.makeText(WeatherMap.this,latLng,Toast.LENGTH_LONG).show();
new ReverseGeocodingTask(getBaseContext()).execute(latLng);
}
@Override
public void onMapLongClick(LatLng latLng) {
}
private class ReverseGeocodingTask extends AsyncTask<LatLng, Void, String> {
Context mContext;
public ReverseGeocodingTask(Context context){
super();
mContext = context;
}
// Finding address using reverse geocoding
@Override
protected String doInBackground(LatLng... params) {
Geocoder geocoder = new Geocoder(mContext);
double latitude = params[0].latitude;
double longitude = params[0].longitude;
List<Address> addresses;
addresses = null;
String addressText="";
try {
addresses = geocoder.getFromLocation(latitude, longitude,1);
} catch (IOException e) {
e.printStackTrace();
}
if(addresses != null && addresses.size() > 0 ){
Address address = addresses.get(0);
addressText = String.format("%s, %s, %s",
address.getMaxAddressLineIndex() > 0 ? address.getAddressLine(0) : "",
address.getLocality(),
address.getCountryName());
}
return addressText;
}
@Override
protected void onPostExecute(String addressText) {
// Setting the title for the marker.
// This will be displayed on taping the marker
markerOptions.title(addressText);
// Placing a marker on the touched position
Map.addMarker(markerOptions);
}
}
}