NullPointerException попытка вызвать method.GoogleMap.setMapType (int) 'для пустой ссылки на объект - PullRequest
1 голос
/ 21 марта 2020

У меня есть карта Google во фрагменте для рисования многоугольника в моем приложении. и меню на панели действий, из которого я могу изменить свой вид карты. также один FAB на фрагменте карты Google, чтобы изменить тип карты на спутниковый вид. Но когда я нажимаю на FAB, мое приложение cra sh и выбрасывает

NullPointerException: попытка вызвать виртуальный метод void com .google. android .gms.location.places.ui.SupportPlaceAutocompleteFragment.setFilter (com.google. android .gms.location.places.AutocompleteFilter) 'для ссылки на пустой объект.

вот мой код в методе onCreateView:

    public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {

    mapViewModel = ViewModelProviders.of(this).get(MapViewModel.class);
    View root = inflater.inflate(R.layout.fragment_map, container, false);
    setHasOptionsMenu(true);

    FloatingActionButton fab = root.findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        }
    });

, и это код, который работает в menuItem:

  @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    super.onOptionsItemSelected(item);
    switch (item.getItemId()) {
        case R.id.normal:
            mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            break;
        case R.id.satellite:
            mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
            break;
        case R.id.Draw:
            mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            break;
        default:
            return false;
    }
    return true;
}

1 Ответ

1 голос
/ 24 марта 2020

Необходимо убедиться, что ваш экземпляр GoogleMap mMap был инициализирован, прежде чем вызывать setMapType для него. Сначала попробуйте выполнить быструю проверку:

if (mMap != null) {
    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
}

И, самое главное, дважды проверьте правильность инициализации карты, используя getMapAsync и onMapReady методы согласно руководству Google .

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
    }
}

Надеюсь, это поможет!

...