2017-02-15 2 views
0

Ich habe eine Google Map in meiner Xamarin Forms App implementiert, bekomme aber die oberhalb der Ausnahme, wenn Sie von der Seite weg navigieren, bevor die Karte den aktuellen Standort geladen hat.[MissingMethodException: Kein Konstruktor gefunden für Xamarin.Forms.Maps.Android.MapRenderer ::. Ctor (System.IntPtr, Android.Runtime.JniHandleOwnership)]

Dies ist wahrscheinlich das gleiche Problem zuvor ausgelöst, aber unbeantwortet here.

Aus meiner Forschung glaube ich, das Problem zu undichten abstration Antwort in dieser separaten Frage gegeben verwandt ist: MonoDroid: Error when calling constructor of custom view - TwoDScrollView

Jedoch habe ich nicht genug Kenntnisse in Java oder Android-Entwicklung zu wissen, haben Sie, wie Sie dieses Problem zu beheben. Ich hoffe, dass jemand erklären kann, wo und wie ich mit dieser Ausnahme umgehen kann, wenn sie auftritt. Im Grunde muss ich, glaube ich, die Ausnahme machen und im Droid-Projekt damit umgehen, aber wo?

Dies sind die wichtigsten Ausnahme Nachrichten, die ich bekomme.

Nachricht: [NotSupportedException:. Kann nicht Instanz vom Typ Xamarin.Forms.Maps.Android.MapRenderer aus nativen Griff 0xbef7ad5c (key_handle 0xd4608e7) aktivieren]

Nachricht: [Missing: Kein Konstruktor für Xamarin gefunden . .Forms.Maps.Android.MapRenderer :: ctor (System.IntPtr, Android.Runtime.JniHandleOwnership)]

Nachricht:. [Ausnahme vom Typ 'Java.Interop.JavaLocationException' geworfen wurde]

Antwort

1

Allerdings habe ich nicht genug Kenntnisse über Java oder Android-Entwicklung, um zu wissen, wie dieses Problem gelöst werden kann. Ich hoffe, dass jemand erklären kann, wo und wie ich mit dieser Ausnahme umgehen kann, wenn sie auftritt.

Ich glaube, der Grund dafür ist, wenn Sie die Seiten navigieren, die Dispose Methode der Xamarin.Forms.Maps.Android.MapRenderer vor dem Laden des Restes der Karte genannt wird. ACW muss eine neue Instanz von MapRenderer erstellen, konnte aber keine neue erstellen, da MapRenderer keine Konstruktormethode von (IntPtr, JniHandleOwnership) hat.

Wenn Sie Premature Dispose() Calls beziehen können Sie folgende Erklärung finden:

Wenn die Unterklasse enthält eine (IntPtr, JniHandleOwnership) Konstruktor, wird eine neue Instanz des Typs erstellt wird.

So ist die Abhilfe für dieses Ausnahme einer Unterklasse zu erstellen ist (Lasst uns MyMapRenderer sagen) für Xamarin.Forms.Maps.Android.MapRenderer, die einen Konstruktor mit zwei Argumenten hat: (IntPtr, JniHandleOwnership), und verwenden Sie MyMapRenderer für Kartenwiedergabe:

  1. In PCL ein benutzerdefiniertes Steuerelement für Xamarin.Forms.Map.Map erstellen und MyMap stattdessen in Ihrem Projekt verwenden:

    public class MyMap:Map{} 
    
  2. Erstellen eines benutzerdefinierten MapRenderer in Droid-Projekt, das eine (IntPtr, JniHandleOwnership) contructor hat:

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

Einzelheiten über eine benutzerdefinierte erstellen MapRenderer finden Sie in Custom a Map.

+0

Brilliant, danke – JohnH

Verwandte Themen