2017-02-15 17 views
0

Я внедрил карту Google в своем приложении форм Xamarin, но получаю выше исключения, когда вы переходите от страницы до того, как карта завершила загрузку текущего местоположения.[MissingMethodException: не найдено конструктора для Xamarin.Forms.Maps.Android.MapRenderer ::. Ctor (System.IntPtr, Android.Runtime.JniHandleOwnership)]

Это, вероятно, тот же вопрос, который ранее был поднят, но не ответил here.

Из моих исследований я считаю, что проблема связана с утечкой abstration ответа, данным в этом отдельном вопросе: MonoDroid: Error when calling constructor of custom view - TwoDScrollView

Однако у меня не хватает знаний Java или Android развития, чтобы знать, как решить эту проблему. Я надеюсь, что кто-то сможет объяснить, где и как я могу справиться с этим исключением, когда это происходит. В принципе, я считаю, что мне нужно добиться того, что он ловит исключение и обрабатывает его в проекте Droid, но где?

Это ключевые сообщения об исключениях, которые я получаю.

Сообщение: [NotSupportedException:. Невозможно активировать экземпляр типа Xamarin.Forms.Maps.Android.MapRenderer из родной ручки 0xbef7ad5c (key_handle 0xd4608e7)]

Сообщение: [MissingMethodException: Нет конструктор не найдено для Xamarin . :: .Forms.Maps.Android.MapRenderer т е р (System.IntPtr, Android.Runtime.JniHandleOwnership)]

Сообщение:. [Исключение типа 'Java.Interop.JavaLocationException' был брошен]

ответ

1

Однако у меня недостаточно знаний о разработке Java или Android, чтобы узнать, как решить эту проблему. Я надеюсь, что кто-то сможет объяснить, где и как я могу справиться с этим исключением, когда это происходит.

Я думаю, что причина в том, когда вы перемещаетесь на страницах, то Dispose метод Xamarin.Forms.Maps.Android.MapRenderer вызывается перед загрузкой остальной части карты. ACW необходимо создать новый экземпляр MapRenderer, но не удалось создать новый, потому что MapRenderer не имеет метода конструктора (IntPtr, JniHandleOwnership).

Если вы обратитесь к Premature Dispose() Calls вы можете найти следующее заявление:

Если подкласс содержит конструктор (IntPtr, JniHandleOwnership), то будет создан новый экземпляр типа.

Так обходной путь для этого исключения является создание подкласса (Скажем MyMapRenderer) для Xamarin.Forms.Maps.Android.MapRenderer, который имеет конструктор с двумя аргументами: (IntPtr, JniHandleOwnership) и использовать MyMapRenderer для карты рендеринга:

  1. В PCL создать пользовательский элемент управления для Xamarin.Forms.Map.Map и использовать MyMap вместо этого в вашем проекте:

    public class MyMap:Map{} 
    
  2. Создание настраиваемого MapRenderer в Droid проекта, который имеет (IntPtr, JniHandleOwnership) застройщик:

    [assembly:ExportRenderer(typeof(MyMap),typeof(MyMapRenderer))] 
    namespace YourNameSpace.Droid 
    { 
        public class MyMapRenderer:MapRenderer 
        { 
         public MyMapRenderer(IntPtr handle, JniHandleOwnership transfer) { } 
        } 
    } 
    

Для получения дополнительной информации о создании пользовательских MapRenderer, пожалуйста, обратитесь к Custom a Map.

+0

Блестящий, спасибо – JohnH

 Смежные вопросы

  • Нет связанных вопросов^_^