0

Я потратил некоторое время, пытаясь заставить это работать, и я все время застрял в каждом учебнике. Короче, я пытаюсь создать приложение с вкладками, в котором одна из вкладок, которую он отображает Google.получение google-карт в приложении для Android с вкладками

Я установил все обычные ошибки:

Я скачал все соответствующие через SDK. У меня есть ключ API на месте. Я добавил компилировать com.google.android.gms:play-services:7.5.0 to my dependencies.

Я пытаюсь следовать this code, но он не был полностью работает для меня, поэтому я изменил его немного, но я до сих пор работает в стену.

Моя текущая ошибка: java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized. Я решил, что это было бы инициализировано в getMapAsync.

Вот мой Java-код:

public class MapFragment extends Fragment{ 

    MapView mMapView; 
    private GoogleMap googleMap; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // inflat and return the layout 
     View v = inflater.inflate(R.layout.fragment_location_info, container, 
       false); 

     mMapView = (MapView) v.findViewById(R.id.mapView); 
     mMapView.onCreate(savedInstanceState); 

     mMapView.onResume();// needed to get the map to display immediately 

     mMapView.getMapAsync(new OnMapReadyCallback() { 
      @Override 
      public void onMapReady(GoogleMap googleMap) { 
       MapsInitializer.initialize(getApplicationContext()); 
       // latitude and longitude 
       double latitude = 17.385044; 
       double longitude = 78.486671; 


       // create marker 
       MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps"); 

       // Changing marker icon 
       marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE)); 
      } 
     }); 

     //MapsInitializer.initialize(getApplicationContext()); 

     googleMap = mMapView.getMap(); 
     // latitude and longitude 
     double latitude = 17.385044; 
     double longitude = 78.486671; 


     // create marker 
     MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps"); 

     // Changing marker icon 
     marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE)); 

     // adding marker 
     googleMap.addMarker(marker); 

     CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(17.385044, 78.486671)).zoom(12).build(); 

     googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

     // Perform any camera updates here 
     return v; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     mMapView.onResume(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     mMapView.onPause(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     mMapView.onDestroy(); 
    } 

    @Override 
    public void onLowMemory() { 
     super.onLowMemory(); 
     mMapView.onLowMemory(); 
    } 
} 
+1

FWIW, [здесь является примером приложения] (https://github.com/commonsguy/cw-omnibus/tree/master/MapsV2/Pager), который имеет карту на каждой из десяти страниц «ViewPager» с индикатором с вкладками. – CommonsWare

+0

@JohnF Помог ли вам ответ на этот вопрос? Дай мне знать! –

+0

выглядит хорошо, и у меня нет сообщений об ошибках, но у меня проблемы с запуском на эмуляторе. – JohnF

ответ

1

Похоже, что ваш код находится в середине трансформации. Вы звоните как getMapAsync() И getMap().

Просто используйте getMapAsync() и ничего не делайте с картой, пока не получите обратный вызов onMapReady().

Кроме того, вам не нужно MapsInitializer. Из документации:

Используйте этот класс для инициализации API Android Карт Google, если перед получением карты необходимо использовать функции . Он должен быть вызван, потому что некоторые классы , такие как BitmapDescriptorFactory и CameraUpdateFactory, нуждаются в инициализации .

Если вы используете MapFragment или MapView и уже получили (непустой) GoogleMap, вызвав GetMap() на любой из этих классов, то вам не нужно беспокоиться об этом классе. См. Пример для некоторых примеров.

Вот ваш код устроился немного:

public class MapFragment extends Fragment implements OnMapReadyCallback { 

     MapView mMapView; 
     private GoogleMap googleMap; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      // inflate and return the layout 
      View v = inflater.inflate(R.layout.fragment_location_info, container, 
        false); 

      mMapView = (MapView) v.findViewById(R.id.mapView); 
      mMapView.onCreate(savedInstanceState); 

      //mMapView.onResume(); // should not be needed 

      mMapView.getMapAsync(this); 

      //MapsInitializer.initialize(getApplicationContext()); 

      // Perform any camera updates here 
      return v; 
     } 

     @Override 
     public void onMapReady(GoogleMap gMap) { 

      googleMap = gMap; 

      mMapView.onResume(); //call this here if you really need to 

      //MapsInitializer.initialize(getApplicationContext()); 
      // latitude and longitude 
      double latitude = 17.385044; 
      double longitude = 78.486671; 

      // create marker 
      MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps"); 

      // Changing marker icon 
      marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE)); 

      // adding marker 
      googleMap.addMarker(marker); 

      CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(17.385044, 78.486671)).zoom(12).build(); 

      googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

     } 
    //......................... 
+0

Если бы это была деятельность, а не фрагмент, то она была бы такой же? Я имею в виду, нужно ли использовать MapView? –

+0

@ReneLimon Взгляните на другой ответ, на который я ссылался в вашем вопросе, он может быть более применимым, чем этот. –

Смежные вопросы