0

EDIT: jemand markierte es als ein Duplikat, aber es ist ziemlich klar, dass dies nicht der Fall ist, aber vor allem ein API-Fehler.Android - Null Referenz für marker.setIcon()

Ich habe ein seltsames Problem mit Maps aufgetreten.

Zunächst einmal meinen Code:

@Override 
public void onListUpdated() { 
    // Cleaning all the markers. 
    if (mGoogleMap != null) { 
     mGoogleMap.clear(); 
    } 

    List<PetrolStation> petrolStationList = mPetrolStationsList.getList(); 
    final HashMap<Marker, PetrolStation> markerPetrolStationHashMap = new HashMap<>(); 

    // Get the fuel selected by user. 
    String fuelPrefs = loadPreferences(SETTINGS_PREFERENCES, FUEL_KEY); 
    long fuelId = Long.valueOf(fuelPrefs); 

    for (PetrolStation petrolStation : petrolStationList) { 
     double lat = petrolStation.getLat(); 
     double lon = petrolStation.getLon(); 

     if (mGoogleMap != null) { 
      Marker marker = mGoogleMap.addMarker(new MarkerOptions().position(new LatLng(lat, lon))); 

      PROBLEM IS HERE -> marker.setIcon(BitmapDescriptorFactory.fromResource(getMarkerIcon(fuelId))); 
      markerPetrolStationHashMap.put(marker, petrolStation); 
     } 
    } 

    ... 

} 

Dies ist eine Methode einer Schnittstelle ich erklärt habe.

den Code auf Handys mit älteren APIs alles Testen funktioniert gut, aber einen Emulator mit API v23 verwenden, stürzt es mit dieser Log-Nachricht:

java.lang.NullPointerException: null reference 
at maps.w.c.a(Unknown Source) 
at maps.ad.g$a.<init>(Unknown Source) 
at maps.ad.g.a(Unknown Source) 
at maps.ad.S.a(Unknown Source) 
at abq.onTransact(:com.google.android.gms.DynamiteModulesB:204) 
at android.os.Binder.transact(Binder.java:387) 
at com.google.android.gms.maps.model.internal.zzf$zza$zza.zzak(Unknown Source) 
PROBLEM IS HERE -> at com.google.android.gms.maps.model.Marker.setIcon(Unknown Source) 
at com.myfuel.fragments.MapFragment.onListUpdated(MapFragment.java:317) 
at com.myfuel.utils.PetrolStationsList$PetrolStationsAsyncTask.onPostExecute(PetrolStationsList.java:229) 
at com.myfuel.utils.PetrolStationsList$PetrolStationsAsyncTask.onPostExecute(PetrolStationsList.java:151) 
... 

Ich habe den Absturz der Linie darauf hingewiesen, was in mein Code und die Referenz innerhalb des Protokolls.

Reading around Ich habe herausgefunden, das ist wahrscheinlich ein Bug (nicht behoben nach all dieser Zeit), aber es ist ziemlich nervig und ich hoffe, jemand wird mir eine Art von Lösung zeigen.

Vielen Dank.

EDIT:

public static int getMarkerIcon(long fuelId) { 
    int drawableId = -1; 

    switch ((int) fuelId) { 

     case 1: { 
      drawableId = R.drawable.marker_petrol; 

      break; 
     } 

     case 2: { 
      drawableId = R.drawable.marker_special_petrol; 

      break; 
     } 

     case 3: { 
      drawableId = R.drawable.marker_lpg; 

      break; 
     } 

     case 4: { 
      drawableId = R.drawable.marker_diesel_image; 

      break; 
     } 

     case 5: { 
      drawableId = R.drawable.marker_special_diesel; 

      break; 
     } 

     case 6 : { 
      drawableId = R.drawable.marker_methane; 

      break; 
     } 
    } 

    return drawableId; 
} 
+0

@Rotwang, lesen Sie bitte alle meine Frage und die Verbindung, die ich, bevor es als Duplikat darauf hingewiesen habe Markierung. Das ist nicht gut von dir. – Davide3i

+0

Schauen Sie sich einfach den Link an, den ich gepostet habe: Es gibt viele andere Leute, die auf diesen Fehler gestoßen sind. Ich habe nur nach einem Workaround gefragt. https://code.google.com/p/gmaps-api-issues/issues/detail?id=7696 – Davide3i

+0

Es gibt einen Workaround auf der gleichen Seite, die Sie verlinkt haben: 'Dieser Fehler kann vermieden werden, indem Ressourcen anstelle von Assets verwendet werden . "res/drawable-nodpi" ist eine brauchbare Substitution. –

Antwort

0

ich eine vorübergehende Lösung gefunden haben, warten auf Google diesen Fehler zu beheben.

Verwenden Sie einfach Bilder anstelle von Vektoren. Ich weiß, es ist nicht so nett, aber im Moment ist es die einzige Lösung für Android 5.0 und höher.

1

Bibliothek haben kein Problem.

Bitte versuchen Sie es unten Code-Snippet.

static final LatLng MELBOURNE = new LatLng(-37.813, 144.962); 
Marker melbourne = mMap.addMarker(new MarkerOptions() 
          .position(MELBOURNE) 
          .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))); 

https://developers.google.com/maps/documentation/android-api/marker

+0

Das ist nicht das Ziel meines Codes: Ich verwende verschiedene Farben, je nachdem, welche Art von Kraftstoff der Benutzer gewählt hat. Um das zu tun, muss ich die Farblaufzeit einstellen, also hat die Bibliothek definitiv ein Problem. Überprüfen Sie den Link, den ich für weitere Informationen gepostet habe. – Davide3i

+0

Tut mir leid, Mann, Aber ich habe mit Ihrem Code überprüft, anstelle von Ihrem Zeichensatz habe ich mein eigenes Symbol verwendet und alles funktioniert gut. Überprüfen Sie unter Code möglicherweise können Sie erhalten Lösung: – ViramP

+0

öffentliche void onMapReady (GoogleMap googleMap) { mMap = googleMap; lat = 65,9667; lang = -18,5333; // Fügen Sie einen Marker in Sydney hinzu und bewegen Sie die Kamera LatLng location = new LatLng (lat, lang); // mMap.addmarker (neue MarkerOptions(). Position (Standort) .title (Firmenname)); für (int i = 1; i <= 5; i ++) { if (mMap! = Null) { Marker marker = mMap.addMarker (neue MarkerOptions(). Position (new LatLng (lat + 1, lang- 2))); – ViramP