5

Poniższe instrukcje nie są wykonywane na niektórych urządzeniach.Dowolna alternatywna metoda odlewania klas

AddEvent act1 = (AddEvent) getLocalActivityManager().getCurrentActivity(); 

Czy istnieje metoda alternatywna dla powyższego wyciągu. Na niektórych urządzeniach działa dobrze, ale na innych urządzeniach daje wyjątek.

Click here... Yellow text shows exception

Edit: Moja aplikacja jest rozwijany w karcie. Wyniki OnActivity są używane do uzyskania obrazu z działania kamery. Nie wiem, gdzie rezyduje, ale kiedy umieszczam powyższą instrukcję w próbie catch, to nie następuje zamknięcie siły i pojawia się tam wyjątek.

+0

Na co rzucasz w OnActivityResult? – Snicolas

+0

co chcesz zrobić? – Sam

+0

Wysyłaj swoje wykresy stosu za pomocą tekstu, zrzuty ekranu są trudne do odczytania, a przepełnienie stosu nie korzysta z reklamy dla mikroprocesora (dolny lewy róg). – Snicolas

Odpowiedz

2

Nie jestem pewien, gdzie piszesz tę linię, ale wynik polecenia logcat mówi: Próbujesz rzucić Home Aktywność w AddEvent i dlatego jej daje ClassCastException.

FYI, getLocalActivityManager().getCurrentActivity(); powraca Home.

+0

, ale dlaczego tak się dzieje tylko w niektórych urządzeniach. Jak to działa dobrze na HTC Wildfire, ale wywala na Sony Xperia Miro i kartę Samsung. –

3

Problem nie polega tak naprawdę na rzutowaniu, ale założenie, że obiekt zwrócony przez getLocalActivityManager().getCurrentActivity() jest typu AddEvent. Trudno powiedzieć, w jakim scenariuszu getLocalActivityManager().getCurrentActivity() zwraca obiekt, który nie jest typu AddEvent, bez patrzenia na twoją implementację.

Poniższy kawałek kodu sprawdzi, czy zwrócony obiekt jest rzeczywiście typu AddEvent:

if(getLocalActivityManager().getCurrentActivity() instanceof AddEvent){ 
    AddEvent act1 = (AddEvent) getLocalActivityManager().getCurrentActivity(); 
} 

Ale w twoim przypadku, zaleca się, aby sprawdzić, w jaki scenariusz sposób getLocalActivityManager().getCurrentActivity() powrócić instancji fable.eventippo.Home jako przeciwko fable.eventippo.AddEvent.

+0

, ale dlaczego tak się dzieje tylko w niektórych urządzeniach. Jak to działa dobrze na HTC Wildfire, ale wywala na Sony Xperia Miro i kartę Samsung. –

+0

za pomocą instanceof Jestem w stanie zobaczyć, na którym urządzeniu działa, czy nie ... Ale jak zaimplementować na nieobsługiwanych urządzeniach. Oznacza, jak na siłę utworzyć instancję klasy. –

+0

Nie można zastosować * force * do utworzenia instancji czegoś, czego oczekujesz, przez rzutowanie. Co więcej, 'ActivityGroup' i' LocalActivityManager' są przestarzałe. Zamiast tego użyj API 'Fragment' i' FragmentManager'. Możesz korzystać z biblioteki wsparcia (pakiet kompatybilności), aby obsługiwać starsze platformy. – Rajesh