2014-09-09 10 views
8

Podczas testowania Android aplikacji, która zawiera kilka pól tekstowych wjazdu i mapę z geolokalizacji włączoną, stwierdziliśmy, że jeśli Kliknąłem przycisk Wstecz na Androidzie, gdy klawiatura ekranowa była podniesiona (to znaczy, podczas wstawiania tekstu na jednym z wpisów), aplikacja zawiesiłaby się, a na wyjściu debugowania pojawiłby się następujący wyjątek:Błąd podczas nawigacji od strony z mapą na Androidzie, gdy klawiatura jest widoczny na ekranie

09-09 00:10:38.187 I/MonoDroid(14174): UNHANDLED EXCEPTION: System.NotSupportedException: Unable to activate instance of type Xamarin.Forms.Maps.Android.MapRenderer from native handle b250001d ---> System.MissingMethodException: No constructor found for Xamarin.Forms.Maps.Android.MapRenderer::.ctor(System.IntPtr, Android.Runtime.JniHandleOwnership) ---> Java.Interop.JavaLocationException: Exception of type 'Java.Interop.JavaLocationException' was thrown.

Cały ślad stosu tutaj: http://pastebin.com/hDAS4JLV

Kilka rzeczy do zachowania Uwaga:

1 - Typy klawiatury używane w tych polach tekstowych to Tekst i telefon.

2 - W przeciwieństwie do tego, co mówi ślad stosu, nie używam w ogóle aparatu w aplikacji.

3 - MapRenderer nie ma takiego konstruktora na Xamarin Forms. Pamiętaj, że używam Xamarin.Forms 1.2.3 (wersja -Pre).

4 - Próbowałem, dodając własną mapę Renderer z manekina konstruktora zaakceptowaną wymagane params według wyjątkiem, bezskutecznie.

5 - Nie dzieje się to w żadnej innej (przetestowanej) sytuacji, tylko gdy wyświetlana jest klawiatura ekranowa.

6 - Tak się nie dzieje w wersji na iOS.

7 - te same czynności badano na kilku urządzeniach (Galaxy Nexus Galaxy S5 Alcatel One Touch), z tym samym rezultatem.

+1

Google Maps wykorzystuje metaforę Kamera, aby opisać, na co patrzysz na mapie. Nie ma nic wspólnego z rzeczywistą kamerą sprzętową w telefonie. – Cheesebaron

+0

czy możesz dostarczyć swój pełny projekt rozwiązania? Sugerowałbym również aktualizację do najnowszych stabilnych wersji i ponowne testowanie. Moje dane kontaktowe znajdują się w moim profilu. – Pete

+0

Nie mogę, przepraszam. Spróbuję wersji stabilnej sprawdzić, czy to działa. – EfrainReyes

Odpowiedz

4

Napotkano ten problem wielokrotnie razy w moim projekcie. Co dzieje się w podsumowaniu, że:

Ukryta strona może zostać zwolnione, gdy nasza aplikacja jest uruchomiona przez Androida, aby zapisać w pamięci. Tak więc, kiedy wrócisz do tej strony, Android musi ją odtworzyć.

Kiedy to nastąpi, Mono utworzy instancję odpowiedniego typu za pomocą konstruktora (IntPtr, JniHandleOwnership), a następnie wywoła konstruktor strony.

Więc problem jest, że trzeba wdrożyć „(IntPtr, JniHandleOwnership) Konstruktor”, aby Mono można utworzyć instancję, gdy są potrzebne. Zwykle wygląda to tak:

public YourClassName(IntPtr javaReference, JniHandleOwnership jniHandleOwnership) 
    : base(javaReference, jniHandleOwnership) { } 

John Pryor obecny przewód Xamarin Androida ma a pretty detailed answer about it który opisuje zachowanie.

I rzeczywiście już podkreślono ważną część jego wyjaśnień in this post.

Powiązane problemy