Frage

Ich baue mit Xamarin eine mobile App für Android und möchte PayPal verwenden, damit der Benutzer uns bezahlt.Nach der Zahlung möchte ich die Bestätigung an unseren Server senden, um zu überprüfen, ob die Zahlung korrekt und vollständig ist und die Änderung in Bezug auf den Kauf vorgenommen hat.

Ich habe das Android SDK verwendet, um eine Java-Bindungsbibliothek zu erstellen.Ich habe das Tutorial verwendet unter: https://github.com/paypal/PayPal-Android-SDK/blob/master/docs/single_zahlung.md

PaymentConfirmation confirm = 
    data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);

Ich habe es wie folgt in C# umgewandelt:

PaymentConfirmation confirm = 
    data.GetParcelableExtra(PaymentActivity.ExtraResultConfirmation);

Dies gibt mir eine Ausnahme, die besagt, dass es eine explizite Besetzung gibt, also füge ich sie hinzu:

PaymentConfirmation confirm = 
   (PaymentConfirmation)data.GetParcelableExtra(PaymentActivity.ExtraResultConfirmation)

Dies führt zu folgender Ausnahme: System.InvaliCastException: Cannot cast from source type to destination type.

Ich habe alles versucht, was mir einfiel, also suche ich Hilfe.

Ein funktionsfähiges Teilprojekt finden Sie hier:https://github.com/PhilSim22/PartialProject/tree/master

Ich unterliege einer Geheimhaltungsvereinbarung, daher wurde alles, was nicht mit dem Problem zusammenhängt, herausgeschnitten.Entschuldigung für die Unannehmlichkeiten.

War es hilfreich?

Lösung

Ich habe die Antwort gefunden.Ich musste einen JAVA-Cast anstelle eines normalen Casts verwenden.hier ist meine Lösung:

            var confirmObj = data.GetParcelableExtra (PaymentActivity.ExtraResultConfirmation);
            PaymentConfirmation confirm = Android.Runtime.Extensions.JavaCast<PaymentConfirmation> (confirmObj);

Andere Tipps

Ich finde die Lösung nicht, vielleicht kann Ihnen die Komponente parse.com helfen:https://parse.com/tutorials/integrating-with-third-party-services

Bei jeder ungültigen Umwandlungsausnahme würde ich als Erstes versuchen, das Ergebnis, das Sie umwandeln möchten, in einer temporären Variablen zu speichern und ihren Typ entweder im Debug-Modus oder durch Protokollierung zu überprüfen.

Deshalb würde ich so etwas machen:

object temp = data.GetParcelableExtra(PaymentActivity.ExtraResultConfirmation);
Console.WriteLine(temp.GetType().FullName);
Console.WriteLine("Can Assign: {0}", typeof(PaymentConfirmation).IsAssignableFrom(temp.GetType()));

Auf diese Weise können Sie sehen, ob der zurückgegebene Typ mit dem umgewandelten Typ „PaymentConfirmation“ übereinstimmt.

Können Sie den vollständigen Klassennamen der Quell- und Zielklassen teilen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top