5

Die folgende Anweisung wird auf einigen Geräten nicht ausgeführt.Jede alternative Methode für Class Casting

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

Gibt es eine alternative Methode für obige Aussage. Bei einigen Geräten funktioniert es einwandfrei, bei anderen Geräten gibt es Ausnahmen.

Click here... Yellow text shows exception

Edit: Meine Anwendung ist in Tab entwickelt. OnActivity-Ergebnisse werden verwendet, um ein Bild von einer Kameraaktivität zu erhalten. Ich weiß nicht, wo das residiert, aber wenn ich die obige Anweisung in try catch setze, dann tritt kein erzwungenes Schließen auf und eine Exception wird dort angezeigt.

+0

Was haben Sie in onActivityResult getan? – Snicolas

+0

was möchten Sie tun? – Sam

+0

Bitte senden Sie Ihre Stack-Traces per Text, Ihr Screenshot ist schwer zu lesen und Stack-over-Flow profitiert nicht von der Anzeige für Micro $ oft (untere linke Ecke). – Snicolas

Antwort

2

Ich bin nicht sicher, wo Sie diese Zeile schreiben, aber logcat Ausgabe sagt: Sie versuchen, Home Aktivität in AddEvent zu werfen und aus diesem Grund seine Sie ClassCastException geben.

FYI, getLocalActivityManager().getCurrentActivity(); gibt Home zurück.

+0

aber warum passiert das nur bei einigen Geräten? Wie es bei HTC Wildfire funktioniert, aber auf Sony Xperia miro und Samsung Registerkarte abstürzt. –

3

Das Problem ist nicht wirklich mit dem Gießen, aber die Annahme, dass das Objekt von getLocalActivityManager().getCurrentActivity() zurückgekehrt ist vom Typ AddEvent. Es wäre schwierig zu sagen, in welchem ​​Szenario die getLocalActivityManager().getCurrentActivity() ein Objekt zurückgibt, das nicht vom AddEvent-Typ ist, ohne Ihre Implementierung zu betrachten.

Das folgende Stück Code wird überprüfen, ob das zurückgegebene Objekt tatsächlich vom Typ AddEvent:

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

Aber in Ihrem Fall ist es empfehlenswert, um zu überprüfen, was Szenario hat die getLocalActivityManager().getCurrentActivity() gibt eine Instanz von fable.eventippo.Home als gegen fable.eventippo.AddEvent.

+0

aber warum passiert das nur bei einigen Geräten? Wie es bei HTC Wildfire funktioniert, aber auf Sony Xperia miro und Samsung Registerkarte abstürzt. –

+0

mit instanceof kann ich sehen, auf welchem ​​Gerät es funktioniert oder nicht ... Aber wie auf nicht unterstützende Geräte zu implementieren. Bedeutet, wie die Instanz der Klasse zwangsweise erstellt wird. –

+0

Sie können * force * nicht anwenden, um durch Casting eine Instanz von etwas zu erzeugen, das Sie erwarten. Außerdem sind 'ActivityGroup' und' LocalActivityManager' veraltet. Verwenden Sie stattdessen "Fragment" und "FragmentManager" API. Sie können die Support-Bibliothek (Kompatibilitätspaket) verwenden, um ältere Plattformen zu unterstützen. – Rajesh