Intereting Posts
Есть ли способ получить фрагмент сверху стека? Исключение класса Visualizer для Windows Visualizer Ресурсы $ NotFoundException при использовании Robolectric с Gradle Android: почему моментальные снимки и gpu являются взаимоисключающими? В WebView есть ли способ, чтобы shouldOverrideUrlLoading определял, перехватывает ли он перенаправление против пользователя, который нажимает ссылку? GetWidth () и getHeight () из View возвращает 0 Как установить обе строки в ListView с помощью simple_list_item_2? Сообщение об ошибке эмулятора Android: «PANIC: Отсутствует программа для эмулятора эмулятора для« x86 »CPUS». Как сортировать и развязывать Parcelable в массив байтов с помощью Parcel? Запуск приложения Google Maps с предоставленным местоположением и маркером Как программно отображать второй ребенок ViewFlipper? Требуется простой пример OSMDroid Установить шрифт во время выполнения, Textview Как обрабатывать несколько фрагментов для одного действия Поддержка speex в android

Google Maps CameraUpdateFactory не инициализирован

Я получаю некоторые сообщения от пользовательского опыта через crashlytics, давая мне ошибку

Fatal Exception java.lang.NullPointerException CameraUpdateFactory is not initialized 

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

Я читал, что это может произойти, если карты не были инициализированы, что, я думаю,

 if(googleMap!=null){ googleMap.animateCamera(CameraUpdateFactory.newLatLng(selectedLatLng)); } 

Вероятно, причиной может быть то, что сервисы Google Play не находятся на устройстве или устарели, и я добавил некоторые подтверждения для этого.

  public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(FuelsFragment.this.getActivity()); // Showing status //CAMERAUPDATE FACTORY CRASH CAN BE A RESULT OF GOOGLE PLAY SERVICES NOT INSTALLED OR OUT OF DATE //ADDITIONAL VERIFICATION ADDED TO PREVENT FURTHER CRASHES //https://github.com/imhotep/MapKit/pull/17 if(status == ConnectionResult.SUCCESS) { mMapFragment = ReepMapFragment.newInstance(); FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.mapContainer, mMapFragment); fragmentTransaction.commit(); } else if(status == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED){ reep.toastNotify("You need to update Google Play Services in order to view maps"); } else if (status==ConnectionResult.SERVICE_MISSING){ reep.toastNotify("Google Play service is not enabled on this device."); } 

После этого я не уверен, что делать дальше, поскольку этого не происходит для каждого пользователя.

Если у кого-то есть мысли о том, почему это происходит, я буду благодарен за ваш вклад

Solutions Collecting From Web of "Google Maps CameraUpdateFactory не инициализирован"

Я получал ту же ошибку, хотя я получил ненулевой объект GoogleMap из MapView. Я разрешил его с явным вызовом MapsInitializer, хотя документация говорит, что это не нужно.

Фрагмент моего приложения настраивает MapView следующим образом:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.map_panel, container, false); mapView = (MapView) view.findViewById(R.id.map_view); mapView.onCreate(savedInstanceState); configureMap(mapView.getMap()); return view; } private void configureMap(GoogleMap map, double lat, double lon) { if (map == null) return; // Google Maps not available try { MapsInitializer.initialize(getActivity()); } catch (GooglePlayServicesNotAvailableException e) { Log.e(LOG_TAG, "Have GoogleMap but then error", e); return; } map.setMyLocationEnabled(true); LatLng latLng = new LatLng(lat, lon); CameraUpdate camera = CameraUpdateFactory.newLatLng(latLng); map.animateCamera(camera); } 

Прежде чем добавить вызов в MapsInitializer, я получаю исключение из CameraUpdateFactory. После добавления вызова CameraUpdateFactory всегда выполняется успешно.

Просто используйте MapsInitializer.initialize без try-catch, потому что он не бросает GooglePlayServicesNotAvailableException в последнюю версию сервисов Google Play, которая была проверена с пакетом версии 5084032.

Может быть, вы должны сделать Class.forName() ? Для CameraUpdateFactory ? В try - catch

Что-то из моего MapUtil , которое обрабатывает этот случай:

 public static void animateCamera(final MapView mapView, final GoogleMap map, final LatLng location) { try{ CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(location, getBetterZoom(map)); map.animateCamera(cameraUpdate); }catch(Exception e) { MapsInitializer.initialize(mapView.getContext()); if (mapView.getViewTreeObserver().isAlive()) { mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressLint("NewApi") @Override public void onGlobalLayout() { GlobalyLayoutListenerUtil.removeGlobalLayoutListener(mapView, this); animateCamera(mapView, mapView.getMap(), location); } }); } else { if(map != null){ map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { @Override public void onMapLoaded() { if(location != null){ animateCamera(mapView, mapView.getMap(), location); } } }); } } } } 

Некоторое время, которое может быть вызвано старой службой Google Play, пожалуйста, обновите сервис Google Play, это может помочь вам