#java #android-studio #google-maps #android-fragments
#java #android-studio #google-карты #android-фрагменты
Вопрос:
итак, у меня есть bottomNavigationView
то, что содержит вкладки и переходит к фрагментам с помощью setOnNavigationItemSelectedListener()
в одном из фрагментов мне нужно отобразить карты Google, но я получаю эту ошибку:
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync (com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference
несмотря на то, что я инициализировал SupportMapFragment прямо над строкой ошибки getMapAsync()
следующим образом : supportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.google_map);
вот как выглядит мой код
xml:
<fragment
android:id="@ id/my_map"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"
tools:context=".NearbyFragment">
</fragment>
и в коде Java (NearbyFragment.java)
я поместил весь код в onCreateView
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_nearby, container, false);
supportMapFragment = (SupportMapFragment)
getChildFragmentManager().findFragmentById(R.id.google_map);
supportMapFragment.getMapAsync(this); // ERROR IN THIS LINE
client = LocationServices.getFusedLocationProviderClient(getContext());
getCurrentLocation();
return view;
}
это метод для getCurrentLocation();
public void getCurrentLocation() {
if (..permission == granted){
Task<Location> task = client.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null){
supportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
// init Lat Lng
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
CameraPosition cameraPosition = CameraPosition.builder().target(latLng).zoom(16).bearing(0).tilt(0).build();
googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
// creat marker options
MarkerOptions markerOptions = new MarkerOptions().position(latLng).title("im here");
// add marker
googleMap.addMarker(markerOptions);
}
});
}
}
});
}
else {
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 44);
}
}
Я не знаком с Fragment
тем, как это работает, когда я использую его Activity
с небольшими изменениями, но мне это нужно, Fragment
пожалуйста, помогите
Комментарии:
1. ваш идентификатор карты в XML-файле — my_map. вы пытаетесь получить R.id.google_map в вашем фрагменте Java-кода.
2. Я исправил это, но все равно получаю ту же ошибку @beherad