2016-08-11 4 views
1

У меня возникла эта странная проблема, и я не нашел никакой помощи в Интернете.Android Pay: BadParcelableExcaption для com.google.android.gms.wallet.shared.BuyFlowConfig

У меня есть BaseActivity, где у меня есть следующий код:

@Override 
public void startActivityForResult(Intent intent, int requestCode, Bundle options) { 
    intent.putExtra(Constants.ARG_FROM_ACTIVITY, getClass().getName()); 
    super.startActivityForResult(intent, requestCode, options); 
} 

Теперь я пытаюсь интегрировать Android Pay в моем PaymentActivity следующим образом:

private void showWallet() { 
     WalletFragmentStyle walletFragmentStyle = new WalletFragmentStyle() 
       .setBuyButtonText(WalletFragmentStyle.BuyButtonText.BUY_WITH) 
       .setBuyButtonAppearance(WalletFragmentStyle.BuyButtonAppearance.ANDROID_PAY_LIGHT) 
       .setBuyButtonWidth(WalletFragmentStyle.Dimension.MATCH_PARENT); 

     WalletFragmentOptions walletFragmentOptions = WalletFragmentOptions.newBuilder() 
       .setEnvironment(WalletConstants.ENVIRONMENT_TEST) 
       .setFragmentStyle(walletFragmentStyle) 
       .setTheme(WalletConstants.THEME_LIGHT) 
       .setMode(WalletFragmentMode.BUY_BUTTON) 
       .build(); 

     SupportWalletFragment supportWalletFragment = SupportWalletFragment.newInstance(walletFragmentOptions); 

     MaskedWalletRequest maskedWalletRequest = MaskedWalletRequest.newBuilder() 
       .setPaymentMethodTokenizationParameters(PaymentMethodTokenizationParameters.newBuilder() 
         .setPaymentMethodTokenizationType(PaymentMethodTokenizationType.PAYMENT_GATEWAY) 
         .addParameter("gateway", "stripe") 
         .addParameter("stripe:publishableKey", "<my-key>") 
         .addParameter("stripe:version", Stripe.VERSION) 
         .build()) 
       .setShippingAddressRequired(false) 
       .setEstimatedTotalPrice("1.00") 
       .setCurrencyCode("USD") 
       .build(); 

     WalletFragmentInitParams initParams = WalletFragmentInitParams.newBuilder() 
       .setMaskedWalletRequest(maskedWalletRequest) 
       .setMaskedWalletRequestCode(MASKED_WALLET_REQUEST_CODE) 
       .build(); 

     supportWalletFragment.initialize(initParams); 

     getSupportFragmentManager() 
       .beginTransaction() 
       .replace(R.id.container, supportWalletFragment, WALLET_FRAGMENT_TAG) 
       .commit(); 
    } 

Но, когда я пытаюсь выполните приведенный выше код, я получаю следующий сбой:

android.os.BadParcelableException: 
ClassNotFoundException when unmarshalling: com.google.android.gms.wallet.shared.BuyFlowConfig 
at android.os.Parcel.readParcelableCreator(Parcel.java:2432) 
at android.os.Parcel.readParcelable(Parcel.java:2358) 
at android.os.Parcel.readValue(Parcel.java:2264) 
at android.os.Parcel.readArrayMapInternal(Parcel.java:2614) 
at android.os.BaseBundle.unparcel(BaseBundle.java:221) 
at android.os.BaseBundle.putString(BaseBundle.java:430) 
at android.content.Intent.putExtra(Intent.java:6394) 
at com.test.BaseActivity.startActivityForResult(BaseActivity.java:122) 
at android.support.v4.app.ActivityCompatJB.startActivityForResult(ActivityCompatJB.java:31) 
at android.support.v4.app.ActivityCompat.startActivityForResult(ActivityCompat.java:163) 
at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:948) 
at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:1057) 
at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:947) 
at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:936) 
at com.google.android.gms.dynamic.zzh.startActivityForResult(Unknown Source) 
at com.google.android.gms.dynamic.zzc$zza.onTransact(Unknown Source) 
at android.os.Binder.transact(Binder.java:387) 
at lvg.a(:com.google.android.gms:728) 
at com.google.android.gms.wallet.dynamite.fragment.b.a(:com.google.android.gms:551) 
at aaee.handleMessage(:com.google.android.gms:210) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Линия крушения, где я положил intent.putExtra в мой BaseActivity.

Странная часть заключается в том, что приложение терпит крах, потому что оно не может разобрать com.google.android.gms.wallet.shared.BuyFlowConfig. Но он терпит неудачу, потому что я пытаюсь поставить лишний в том же intent в моей BaseActivity? Я очень смущен. Любая помощь приветствуется.

+0

любые обновления по этому вопросу? У меня похожие проблемы. – Intern

ответ

0

Активность приложения может быть переопределяющей startActivityForResult и попыткой изменить намерение, которое запускает API-интерфейс Play Services. Когда вы пытаетесь изменить намерение, Android попытается раскрыть содержимое Bundle, а затем эта ошибка может произойти из-за того, что этот класс не существует в ClientLibrary.