Я пытаюсь реализовать OnMapLongClickListener
для моего приложения карты, чтобы каждый раз, когда пользователь долго щелкает по экрану, маркер появляется в соответствующем месте.Почему onMapLongClick бросает исключение RuntimeException?
Мой класс MainActivity выглядит следующим образом:
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMapLongClickListener {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// 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);
mMap.setOnMapLongClickListener(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Hatfield and move the camera
LatLng hatfield = new LatLng(51.7471060, -0.22978);
mMap.addMarker(new MarkerOptions()
.position(hatfield)
.title("Hertfordshire Times")
.snippet("Hertfordshire Lecturer wins Nobel Prize")
.draggable(true));
mMap.moveCamera(CameraUpdateFactory.newLatLng(hatfield));
mMap.addCircle(new CircleOptions()
.center(hatfield)
.fillColor(0x5500ff00)
.strokeColor(Color.WHITE).radius(60));
}
@Override
public void onMapLongClick(final LatLng latLng) {
if(mMap != null) {
Toast.makeText(this, "Long press", Toast.LENGTH_LONG).show();
mMap.addMarker(new MarkerOptions()
.position(latLng)
.title("You placed a marker here")
.icon(BitmapDescriptorFactory.defaultMarker()));
}
}
}
После того, как OnMapLongClick
пробегов метод, он бросает NullPointerException
(фрагмент ошибки приведен ниже):
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.setOnMapLongClickListener(com.google.android.gms.maps.GoogleMap$OnMapLongClickListener)' on a null object reference
at com.example.paulmbw.map_application_fyp.MapsActivity.onCreate(MapsActivity.java:29)
Любая идея, что я «Неправильно? Я видел похожие ответы на Stack, но не могу найти решение для своей проблемы. Любая помощь будет оценена.
Спасибо.
Поскольку 'mMap' есть ** NULL ** – Rami
Переместите 'mMap.setOnMapLongClickListener (this);' в метод 'onMapReady()'. –
Возможный дубликат [Что такое Исключение Null Указатель и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do -i-fix-it) –