문제

저는 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);
.

i를 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 솔루션을 찾지 못합니다 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과 일치하는지 확인할 수 있습니다.

원본 및 목적지 클래스의 전체 클래스 이름을 공유 할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top