NullPointer Exception en Android Google Maps durante la actualización de Mapa
Recientemente he incluido ACRA en mi aplicación, que incluye un GoogleMapSupportFragment
. Ahora obtengo algunos informes de fallos, que no puedo reproducir en mi dispositivo. La aplicación se bloquea, si quiero poner nuevos marcadores en el mapa. Cada marcador está conectado con una ubicación, que tiene más información (dirección, nombre, ….).
Esta es mi clase que administra GoogleMap
- Java.lang.NullPointerException en el paquete extras = data.getExtras ();
- Android.app.Application no se puede instanciar debido a NullPointerException
- Java.lang.RuntimeException: Error al entregar el resultado ResultInfo {who = null, request = 1888, resultado = 0, data = null} a la actividad
- Excepción de puntero NULL de getSupportFragmentManager de Android en Fragmento
- Acceder a un método de un fragmento de la actividad ViewPager
public SignManager(MainActivity activity, GoogleMap map) { mActivity = activity; this.mMap = map; initMap(); } private void initMap() { mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); mMap.setMyLocationEnabled(true); //... }
Esta es la función, que (a veces) lanza NullPointerException
. La función updateSignsInView
se llama desde un LocalBroadcast
de un AsyncTasks
, que recibe una actualización con nuevos Markers
del servidor.
public void updateSignsInView(LocationWO[] mSignArray) { if(mSignArray == null){ Log.e(DEBUG_TAG,"updateSignsInView() -> mSignArray null"); return; } resetMap(); //delete some unneeded data and do mMap.clear() mMarkerLocationMap = new HashMap<Marker, LocationWO>(); for (int i = 0; i < mSignArray.length; i++) { //!!! this is the bad line: SignManager.java:101 Marker marker = mMap.addMarker(createMapMarker(mSignArray[i])); mMarkerLocationMap.put(marker, mSignArray[i]); } } //create a new Marker with given information private MarkerOptions createMapMarker(LocationWO mLocation) { MarkerOptions mMarker = new MarkerOptions() .position( new LatLng(mLocation.getmLatitude(), mLocation .getmLongitude())) .title(mLocation.getmName() .icon(BitmapDescriptorFactory.fromBitmap(icon)); return mMarker; }
Aquí está el LogCat que recibí:
USER_COMMENT=null ANDROID_VERSION=4.1.1 APP_VERSION_NAME=0.9 BRAND=htc_europe PHONE_MODEL=HTC One X CUSTOM_DATA= STACK_TRACE=java.lang.NullPointerException at maps.aj.bk.a(Unknown Source) at maps.aj.bk.a(Unknown Source) at maps.aj.al.a(Unknown Source) at bcn.onTransact(SourceFile:167) at android.os.Binder.transact(Binder.java:326) at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.addMarker(Unknown Source) at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source) at MYAPP.SignManager.updateSignsInView(SignManager.java:101) at MYAPP.MainActivity$1.onReceive(MainActivity.java:389) at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297) at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46) at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:155) at android.app.ActivityThread.main(ActivityThread.java:5493) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795) at dalvik.system.NativeStart.main(Native Method)
Estoy 99,9% seguro, que mMap
no puede ser null
. mMap se configura en el método onCreate ().
Alguien alguna idea?
EDIT: función setupMap
private void setUpMapIfNeeded() { if (mMap == null) { mMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map_screen)).getMap(); if (mMap != null) { setUpMap(); } } }
- NullPointerException Advertencia sobre getView () dentro del método onActivityCreated / onStart / onViewCreated
- PreferenceActivity da una excepción NullPointerException cuando se selecciona de ListPreference
- Android Api 23 Cambiar Navegación Ver headerLayout textview
- Excepción en unbindDrawables
- TextToSpeech muestra Null Pointer Exception?
- NullPointerException en CustomArrayAdapter
- Utilice Picasso para colocar la imagen en dibujable
- Android ActivityOptions.isReturning () NullPointerException
El problema aquí es icon
pasado es null
.
Pero si el icono de mapa de bits es nulo, ¿no debería bloquearse en el método createMarker ()? ¿O se bloqueará más tarde, porque no hay ningún icono tp lugar en el mapa?
Sí, sería mejor que arrojara NPE directamente dentro de GoogleMap.addMarker
o BitmapDescriptorFactory.fromBitmap
, pero no sucederá dentro de su createMapMarker
menos que llame a un método en el icon
.
No es posible saber por qué es null
, porque no hay ningún código relevante en la pregunta, pero sospecho que el proceso se cancela cuando el usuario deja la aplicación y más tarde se vuelve a crear cuando regresan.
Android destruye la aplicación cuando no se utiliza durante mucho tiempo o el sistema operativo necesita memoria. Si guardó sus MarkerOptions
en onSaveInstanceState
para intentar recrear posteriormente la nota de Marker
, el icono de Marker
no es Parcelable
por lo tanto no se guardará. Usted necesita guardar el icono independientemente como un Bitmap
que es Parcelable
y al recrear el marcador do addMarker(savedMarkerOptions.icon(bitmap));
Una posibilidad es ver es que mMap se está convirtiendo en nulo en algunos casos cuando ocurre un cambio de orientación mientras su asynctask se está ejecutando. En estos casos cuando se llama a updateSignsInView, mMap todavía está por configurarse y así obtendrás un nullpointer en la línea Marker marker = mMap.addMarker(createMapMarker(mSignArray[i]));
Para el resetMap();
que se está llamando antes de esta línea, posiblemente hay un cheque nulo para mMap y por lo tanto no hay error.
¿conectaste el mapa a Fragment en el archivo xml? por ejemplo, mmap = findViewbyId (R.id.map); ?