2016-08-11 6 views
1

Ich habe dieses seltsame Problem und ich konnte online keine Hilfe finden.Android Pay: BadParcelableExcaption für com.google.android.gms.wallet.shared.BuyFlowConfig

Ich habe meine BaseActivity, wo ich den folgenden Code haben:

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

Nun, ich versuche, in meinem PaymentActivity Android Pay zu integrieren wie folgt:

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(); 
    } 

Aber, wenn ich versuche, Führen Sie den obigen Code, ich bekomme den folgenden Absturz:

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) 

Die Crash-Linie ist, wo ich intent.putExtra in meinem BaseActivity setzen.

Der komische Teil ist, dass die App abstürzt, weil sie com.google.android.gms.wallet.shared.BuyFlowConfig nicht unmarshall kann. Aber es scheitert, weil ich versuche, ein zusätzliches in derselben intent in meiner BaseActivity zu setzen? Ich bin sehr verwirrt. Jede Hilfe wird geschätzt.

+0

irgendwelche Updates zu diesem Thema? Ich habe ähnliche Probleme. – Intern

Antwort

0

Die Aktivität der App überschreibt möglicherweise startActivityForResult und versucht, die Absicht zu ändern, die die Play Services API auslöst. Wenn Sie versuchen, eine Absicht zu ändern, versucht Android, den Inhalt des Bündels zu entpacken, und dann kann dieser Fehler auftreten, da diese Klasse in der ClientLibrary nicht vorhanden ist.

Verwandte Themen