2014-12-02 6 views
8

Attualmente sto sviluppando un'applicazione Android utilizzando google maps api e a volte ho uno strano incidente (a mio parere) per nessuna ragione ovvia. Ecco il registro blocchi:Tentativo di ottenere la lunghezza dell'array nullo in google maps V2 android app

12-02 16:38:57.071 20796-21137/com.appsolute.ParkYoo E/AndroidRuntime﹕ FATAL EXCEPTION: GLThread 4623 
    Process: com.appsolute.ParkYoo, PID: 20796 
    java.lang.NullPointerException: Attempt to get length of null array 
      at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:399) 
      at java.nio.ByteBufferAsShortBuffer.put(ByteBufferAsShortBuffer.java:159) 
      at com.google.maps.api.android.lib6.gmm6.o.c.a.d.d(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.c.a.d.a(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.a.a(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.c.b(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.c.a(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.l.a(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.l.b(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.cw.k(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.cw.run(Unknown Source) 

Come si può vedere, l'incidente avviene in API di Google, ma il codice è stato offuscato in modo da non ho Altre informazioni su che, ad eccezione delle prime 2 righe:

final void put(short[] src, int srcOffset, int shortCount) { 
    checkIsAccessible(); 
    int byteCount = checkPutBounds(SizeOf.SHORT, src.length, srcOffset, shortCount); // here is the error 
    this.block.pokeShortArray(offset + position, src, srcOffset, shortCount, order.needsSwap); 
    position += byteCount; 
    } 

@Override 
    public ShortBuffer put(short[] src, int srcOffset, int shortCount) { 
     byteBuffer.limit(limit * SizeOf.SHORT); 
     byteBuffer.position(position * SizeOf.SHORT); 
     if (byteBuffer instanceof DirectByteBuffer) { 
      ((DirectByteBuffer) byteBuffer).put(src, srcOffset, shortCount); 
     } else { 
      ((ByteArrayBuffer) byteBuffer).put(src, srcOffset, shortCount); 
     } 
     this.position += shortCount; 
     return this; 
    } 

Qualcuno ha già riscontrato questo errore? Che cosa sto facendo di sbagliato ? Se qualcuno ha un'idea di questo problema, sarò lieto di discuterne.

Grazie!

+0

beh, che ne dici di mostrare cosa stai facendo nel tuo codice – tyczj

+0

Ciao e grazie per la tua risposta. Come ho detto, questo non accade nel mio codice ma nel codice lib delle mappe. Ad ogni modo sono desideroso di mostrarti il ​​mio codice ma cosa vuoi vedere? Al momento ho configurato 2 GoogleMaps in attività a schede. – user3476114

+0

Sto ottenendo lo stesso crash, ma non stava succedendo prima. Stai eseguendo la tua app su Lollipop? Sto pensando che abbia a che fare con questo – wmora

risposta

8

Probabilmente stai utilizzando più di un frammento di mappa. Vedi la mia recensione su questo bug fatale che infesta attualmente la libreria di Google Maps, riguardo a più frammenti di mappe - e su come ho trovato una soluzione alternativa.

http://www.aphex.cx/the_google_maps_api_is_broken_on_android_5_here_s_a_workaround_for_multiple_map_fragments/

Google is currently working on the case ed è la priorità per la prossima versione di Google Play Services!

+0

Sì, in realtà sto eseguendo 2 mappe su un cercapersone. All'inizio pensavo di non inizializzare i miei frammenti di mappa come dovrei. Definirò sicuramente la tua soluzione alternativa. Grazie per la tua risposta. – user3476114

+0

quasi 3 anni dopo e non è stato ancora corretto – Boy

+0

Sembra che Google non abbia ancora esaminato questo problema. 'TabLayout',' ViewPager' non è raccomandato in questo caso. Sostituire i frammenti dovrebbe funzionare. – Debdeep

Problemi correlati