質問

私はXamarinのAndroidのためのモバイルアプリを構築しています、そして私たちが私たちを支払うためにユーザーにPayPalを使いたいです。支払いの後、私たちのサーバーへの確認を送信して、支払いが良いことを確認し、購入した変更を完了し、購入した変更を完了しました。

Android SDKを使用して、Javaバインディングライブラリを作成しました。私はチュートリアルを使用しました: https://github.com /paypal/paypal-android-sdk/blob/master/docs/single_payment.md

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

私はそのようにC#に変えた:

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

これは明示的なキャストがあると言っている例外を与えてください。

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

これは次の例外を与えます:System.InvaliCastException: Cannot cast from source type to destination type.

私は私が考えることができるすべてを試してみました。私は助けを探しています。

機能的部分プロジェクトがここに見つかるかもしれません: https://github.com/philsim22/partialProject/tree/master

私は非公開契約の下にあり、問題に関連しないすべてが取り除かれています。ご不便をおかけして申し訳ありません。

役に立ちましたか?

解決

私は答えを見つけました。通常のキャストの代わりにJavaキャストを使用しなければなりませんでした。これが私の解決策です:

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

他のヒント

imあなたは解決策が見つからないかもしれませんcomponent parse.comはあなたを助けることができます: https://parse.com/tutps://parse.com/tutorials/Tutorials/Tegriating-Party-Services.

無効なキャスト例外があると、最初に試してみると、キャストしたい結果を一時変数に保存し、デバッグモードまたはロギングを通じて、その型を調べます。

だから私はこのようなことをするでしょう:

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

このように、返される型がキャスト型のPaymentConfirmationと一致するかどうかがわかりました。

ソースクラスと宛先クラスのフルクラス名を共有できますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top