8

जारी किया गया है मैं Google मानचित्र v2 में मार्कर का आइकन सेट करने का प्रयास कर रहा हूं। मैं नेटवर्क पर कुछ छवियां डाउनलोड कर रहा हूं और कोड में अपनी पृष्ठभूमि बदल रहा हूं। इसके बाद मैं उन्हें मार्करों के प्रतीक के रूप में सेट कर रहा हूं। मानचित्र के पहले निर्माण पर यह ठीक काम करता है लेकिन घूर्णन के बाद एक अपवाद है।अज्ञात बिटमैप संदर्भ

Android संस्करण मैं चलाने इस पर:

public static Bitmap iconizeBitmap(Bitmap bm) { 
    Bitmap bitmap = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), 
      bm.getConfig()); 
    Canvas canvas = new Canvas(bitmap); 
    canvas.drawColor(Color.parseColor("#33B5E5")); 
    canvas.drawBitmap(bm, 0, 0, null); 
    return bitmap; 
} 

स्टैक ट्रेस इस प्रकार है::

 UrlImageViewHelper.loadUrlDrawable(TuvaletlerMapActivity.this, 
       iconUrl, new UrlImageViewCallback() { 

        @Override 
        public void onLoaded(ImageView iv, Bitmap bm, 
          String arg2, boolean arg3) { 
         Bitmap bitmap = VenuesHelper.iconizeBitmap(bm); 
         marker.setIcon(BitmapDescriptorFactory 
           .fromBitmap(bitmap)); 
        } 
       }); 

और VenuesHelper.iconizeBitmap() इस प्रकार है: इस प्रकार 4.3

मेरे कोड है

08-07 10:16:50.684: E/AndroidRuntime(19001): FATAL EXCEPTION: main 
08-07 10:16:50.684: E/AndroidRuntime(19001): java.lang.IllegalArgumentException: Released unknown bitmap reference 
08-07 10:16:50.684: E/AndroidRuntime(19001): at maps.as.i.a(Unknown Source) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at maps.ah.o.b(Unknown Source) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at maps.ah.bn.a(Unknown Source) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at bix.onTransact(SourceFile:204) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at android.os.Binder.transact(Binder.java:347) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at com.google.android.gms.internal.dm$a$a.f(Unknown Source) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at com.google.android.gms.maps.model.Marker.setIcon(Unknown Source) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at com.behlul.tuvaletbul.TuvaletlerMapActivity$TuvaletliYukleCallbacks$1.onLoaded(TuvaletlerMapActivity.java:250) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper$2.run(UrlImageViewHelper.java:615) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper$3.onPostExecute(UrlImageViewHelper.java:653) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper$3.onPostExecute(UrlImageViewHelper.java:1) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at android.os.AsyncTask.finish(AsyncTask.java:631) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at android.os.Looper.loop(Looper.java:137) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at android.app.ActivityThread.main(ActivityThread.java:5103) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at java.lang.reflect.Method.invokeNative(Native Method) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at java.lang.reflect.Method.invoke(Method.java:525) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
08-07 10:16:50.684: E/AndroidRuntime(19001): at dalvik.system.NativeStart.main(Native Method) 

उत्तर

1

समाधान मिला। मैं जांच रहा था कि बिटमैप इसे पुनः लोड करने से पहले कैश में रहता है, लेकिन मैं कैश हिट की जांच करना भूल गया था। अब मैंने कोड संशोधित किया है और यह अब दुर्घटनाग्रस्त नहीं है। मैं दुर्घटनाग्रस्त होने का सटीक कारण नहीं समझ पाया, शायद कुछ मूर्ख कचरे-संग्रह के मुद्दों।

यहाँ संशोधित कोड जो अब दुर्घटनाओं है:

 Bitmap icon = UrlImageViewHelper.getCachedBitmap(iconUrl); 
     if (icon != null) { 
      marker.setIcon(BitmapDescriptorFactory 
        .fromBitmap(VenuesHelper.iconizeBitmap(icon))); 
     } else { //Added this else 
      UrlImageViewHelper.loadUrlDrawable(
        TuvaletlerMapActivity.this, iconUrl, 
        new UrlImageViewCallback() { 

         @Override 
         public void onLoaded(ImageView iv, Bitmap bm, 
           String arg2, boolean arg3) { 
          Bitmap bitmap = VenuesHelper 
            .iconizeBitmap(bm); 
          marker.setIcon(BitmapDescriptorFactory 
            .fromBitmap(bitmap)); 
         } 
        }); 
     } 
10

मैं एक ऐसी ही समस्या थी, जब मैं एक मार्कर को क्रियान्वित "myMarker.setIcon()" को फिर से लोड करने की कोशिश की तो कुछ ताज़ा करता है के बाद एप्लिकेशन में भाग एक "java.lang.IleglegalArgumentException: अज्ञात बिटमैप संदर्भ जारी किया गया"।

मुझे पता चला कि सभी मार्करों की सफाई के लिए "myMap.clear()" को कॉल करना समस्या थी, असल में फ़ंक्शन डॉक्स में आप पढ़ सकते हैं कि "मानचित्र से सभी मार्कर, पॉलिलाइन, बहुभुज, ओवरले इत्यादि को हटा दें।" ।

ठीक है, कि "आदि" और अधिक के रूप में मैं उम्मीद कर रहा है ...

सुलझाने है कि मैं अपने सभी मार्करों एक HashMap में बचाया और एक के बाद एक को हटाने के माध्यम से पुनरावृति के लिए एक कस्टम फ़ंक्शन का उपयोग किया के लिए

, और कहा कि है सब, मेरे कोड में ऐसा कोई अपवाद नहीं है।

आप इस प्रकार उन्हें हटाने के लिए सभी मार्करों के माध्यम से पुनरावृति कर सकते हैं:

/** 
* Alternative to myMap.clear() to avoid undesired exceptions 
*/ 
private void clearAllMapMarkers() { 
    // Clearing the current map markers being shown 
    // Note that we do not use myMap.clear() because that incur in the exception 
    // "java.lang.IllegalArgumentException: Released unknown bitmap reference" 
    try { 
     for (Map.Entry<String, Marker> markerEntry : mMarkerList.entrySet()) { 
      markerEntry.getValue().remove(); 
     } 
    } catch (IllegalArgumentException e) { 
     // Manage here the exception (never raised but who knows...) 
    } 
} 
+1

मैं एक ही अपवाद मिल गया लेकिन एक अलग उपयोग के मामले में। मार्कर को फिर से बनाना चाल था! धन्यवाद। – Loda

संबंधित मुद्दे