Paypal解析Java.Lang.以Xamarin中的PaymentConfirmation为对象

本文关键字:中的 PaymentConfirmation 对象 Xamarin 解析 Java Lang Paypal | 更新日期: 2023-09-27 18:15:29

我正在用Xamarin为android构建一个移动应用程序,我想使用贝宝让用户向我们付款。付款后,我想将确认发送到我们的服务器,以检查付款是否良好和完整,并对购买的进行了修改。

我使用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

我有一份保密协议,所以与这个问题无关的一切都被删除了。很抱歉给您带来不便。

Paypal解析Java.Lang.以Xamarin中的PaymentConfirmation为对象

我找到了答案。我不得不使用JAVA强制转换,而不是普通的强制转换。这是我的解决方案:
            var confirmObj = data.GetParcelableExtra (PaymentActivity.ExtraResultConfirmation);
            PaymentConfirmation confirm = Android.Runtime.Extensions.JavaCast<PaymentConfirmation> (confirmObj);

im如果您找不到解决方案,也许组件parse.com可以帮助您:https://parse.com/tutorials/integrating-with-third-party-services

对于任何无效的强制转换异常,我首先会尝试将要强制转换的结果存储到一个临时变量中,并在调试模式或通过日志记录查看其类型。

因此,我会这样做:

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

通过这种方式,您可以查看返回的类型是否与铸造的类型PaymentConfirmation匹配。

你能分享源类和目标类的完整类名吗?