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;
}
@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
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
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. –