'无法解码图像。提供的图像必须是位图'-Google Map Marker上的SetIcon引发错误

时间:2018-06-26 14:12:22

标签: c# android xamarin.android google-maps-markers google-maps-android-api-2

尝试在Google Maps Map Marker上设置图标时出现以下错误:

  

[ERR] 26/06/2018 10:02:25 a.m.:无法解码图像。提供的   图片必须是位图。 [ERR] 26/06/2018 10:02:25 a.m.:在   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   在<0711a0626e0e4d58a44e8ca32787a4a9>:0中的[0x0000c]   Java.Interop.JniEnvironment + InstanceMethods.CallVoidMethod   (Java.Interop.JniObjectReference实例,Java.Interop.JniMethodInfo   方法,Java.Interop.JniArgumentValue * args)[0x00069]在   :0处   Android.Runtime.JNIEnv.CallVoidMethod(System.IntPtr jobject,   System.IntPtr jmethod,Android.Runtime.JValue * parms)[0x0000e]在   <5680b8d3acca4700bde9a113c467e3e5>:0在   Android.Runtime.JNIEnv.CallVoidMethod(System.IntPtr jobject,   System.IntPtr jmethod,Android.Runtime.JValue [] parms)[0x00017]在   <5680b8d3acca4700bde9a113c467e3e5>:0在   Android.Gms.Maps.Model.Marker.SetIcon   (Android.Gms.Maps.Model.BitmapDescriptor图标)在[0x0004b]中   <51f505f20f3f4c27854ba8f47994abdb>:0在   AMCS.Mobile.Mapping.Android.MarkerManager.UpdateMarker   (AMCS.Mobile.Entity.Mapping.IMarker markerInfo)[0x00083]在   :0处   AMCS.Mobile.Mapping.Android.MapHelper.UpdateMarker   (AMCS.Mobile.Entity.Mapping.IMarker markerInfo)[0x00000]在   :0处   AMCS.Mobile.AMCSMobile.Client.Android.CollectionRouteView.b__462_0   ()[0x00000]在<1d292c66dbaa42139a432bad3cbbbc7b>:0中   Java.Lang.Thread + RunnableImplementor.Run()[0x00008]在   <5680b8d3acca4700bde9a113c467e3e5>:0在   Java.Lang.IRunnableInvoker.n_Run(System.IntPtr jnienv,System.IntPtr   native__this)[0x00008]在<5680b8d3acca4700bde9a113c467e3e5>:0中   (包装器动态方法)   System.Object:6aee8cf7-156f-44a9-94d5-15cb0790d815(intptr,intptr)
  ---托管Java.Lang.RuntimeException堆栈跟踪的末尾--- com.google.maps.api.android.lib6.common.apiexception.b:无法   解码图像。提供的图像必须是位图。在   com.google.maps.api.android.lib6.impl.n.a(:com.google.android.gms.dynamite_dynamitemodulesb @ 12685024 @ 12.6.85   (040406-197041431):12)在   com.google.maps.api.android.lib6.impl.o.a(:com.google.android.gms.dynamite_dynamitemodulesb @ 12685024 @ 12.6.85   (040406-197041431):7)在   com.google.maps.api.android.lib6.impl.cy.a(:com.google.android.gms.dynamite_dynamitemodulesb @ 12685024 @ 12.6.85   (040406-197041431):186)在   com.google.android.gms.maps.model.internal.q.onTransact(:com.google.android.gms.dynamite_dynamitemodulesb @ 12685024 @ 12.6.85   (040406-197041431):87)位于android.os.Binder.transact(Binder.java:507)     com.google.android.gms.maps.model.internal.l $ a $ a.n(未知来源)     com.google.android.gms.maps.model.Marker.setIcon上(未知来源)     在mono.java.lang.RunnableImplementor.n_run(本机方法)处   mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)     在android.os.Handler.handleCallback(Handler.java:751)处   android.os.Handler.dispatchMessage(Handler.java:95)在   android.os.Looper.loop(Looper.java:154)在   android.app.ActivityThread.main(ActivityThread.java:6780)在   java.lang.reflect.Method.invoke(本机方法)位于   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1496)     在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)

我看到UpdateMarker方法失败,如下所示:

    public void UpdateMarker(IMarker markerInfo)
    {
      // _markerLookup is a dictionary defined earlier as:
      // private Dictionary<IMarker,Android.Gms.Maps.Model.Marker> _markerLookup = new Dictionary<IMarker, Android.Gms.Maps.Model.Marker>();
      // It is populated elsewhere
      // Check if the dictionary contains a key for the given value
      if (_markerLookup.ContainsKey(markerInfo))
      {
        Android.Gms.Maps.Model.Marker marker = _markerLookup[markerInfo];
        marker.Position = new LatLng(markerInfo.MapCoordinate.Lat, markerInfo.MapCoordinate.Lng);
        marker.Draggable = markerInfo.MarkerOptions.IsDraggable;

        // Create BitmapDescriptor from Resource - Blue_Vehicle definitely exists and is a .png image
        BitmapDescriptor bitmapDesc = 
        BitmapDescriptorFactory.FromResource(Resource.Drawable.Blue_Vehicle);

        if (bitmapDesc != null)
        {
          marker.SetIcon(bitmapDesc);
        }  
      }
    }

marker.SetIcon方法正在寻找一个BitMapDescriptor,它如上所述是从图像资源创建的。

我不明白为什么它会引发异常。 如果有人可以阐明这个问题,我将不胜感激。

0 个答案:

没有答案