Erfolgreicher Kauf, aber “Klasse nicht gefunden” beim Unmarshalling: com.google.android.finsky.billing.lightpurchase.PurchaseParams

Lesezeit: 4 Minuten

Benutzer-Avatar
lordisch

Ich habe eine App mit In-App-Abrechnung in ihrem Adapter (Liste der zu kaufenden Artikel). Ich habe ein Problem beim Testen der In-App-Abrechnung.

Alles funktioniert einwandfrei – Der Benutzer kann den gesamten Kaufprozess durchlaufen. „Erfolgreicher Kauf“ wird am Ende des Kaufvorgangs angezeigt und es wird eine E-Mail an den Benutzer gesendet, die seinen Kauf bestätigt.

Das Element scheint jedoch nicht verbraucht zu sein, und mein Serveraufruf zum Hinzufügen des Elements zum Benutzer wird nicht aufgerufen. Beim Überprüfen der Protokolle sehe ich diesen Fehler

12-02 13:04:47.701 29663 29663 D IabHelper: Launching buy intent for xxxxxxxxxxx. Request code: 10001
12-02 13:04:47.701  2450  3128 D EnterpriseDeviceManager: ContainerId: 0
12-02 13:04:47.711  2450  3128 E Parcel  : Class not found when unmarshalling: com.google.android.finsky.billing.lightpurchase.PurchaseParams
12-02 13:04:47.711  2450  3128 E Parcel  : java.lang.ClassNotFoundException: com.google.android.finsky.billing.lightpurchase.PurchaseParams
12-02 13:04:47.711  2450  3128 E Parcel  :  at java.lang.Class.classForName(Native Method)
12-02 13:04:47.711  2450  3128 E Parcel  :  at java.lang.Class.forName(Class.java:251)
12-02 13:04:47.711  2450  3128 E Parcel  :  at java.lang.Class.forName(Class.java:216)
12-02 13:04:47.711  2450  3128 E Parcel  :  at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
12-02 13:04:47.711  2450  3128 E Parcel  :  at android.os.Parcel.readParcelable(Parcel.java:2097)
12-02 13:04:47.711  2450  3128 E Parcel  :  at android.os.Parcel.readValue(Parcel.java:2013)
12-02 13:04:47.711  2450  3128 E Parcel  :  at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
12-02 13:04:47.711  2450  3128 E Parcel  :  at android.os.Bundle.unparcel(Bundle.java:249)
12-02 13:04:47.711  2450  3128 E Parcel  :  at android.os.Bundle.getString(Bundle.java:1118)
12-02 13:04:47.711  2450  3128 E Parcel  :  at android.content.Intent.getStringExtra(Intent.java:5145)
12-02 13:04:47.711  2450  3128 E Parcel  :  at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1467)
12-02 13:04:47.711  2450  3128 E Parcel  :  at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1063)
12-02 13:04:47.711  2450  3128 E Parcel  :  at com.android.server.am.ActivityManagerService.startActivityInPackage(ActivityManagerService.java:4313)
12-02 13:04:47.711  2450  3128 E Parcel  :  at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:254)
12-02 13:04:47.711  2450  3128 E Parcel  :  at com.android.server.am.ActivityManagerService.startActivityIntentSender(ActivityManagerService.java:4194)
12-02 13:04:47.711  2450  3128 E Parcel  :  at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:260)
12-02 13:04:47.711  2450  3128 E Parcel  :  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2645)
12-02 13:04:47.711  2450  3128 E Parcel  :  at android.os.Binder.execTransact(Binder.java:404)
12-02 13:04:47.711  2450  3128 E Parcel  :  at dalvik.system.NativeStart.run(Native Method)
12-02 13:04:47.711  2450  3128 E Parcel  : Caused by: java.lang.NoClassDefFoundError: com/google/android/finsky/billing/lightpurchase/PurchaseParams
12-02 13:04:47.711  2450  3128 E Parcel  :  ... 19 more
12-02 13:04:47.711  2450  3128 E Parcel  : Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.finsky.billing.lightpurchase.PurchaseParams" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
12-02 13:04:47.711  2450  3128 E Parcel  :  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
12-02 13:04:47.711  2450  3128 E Parcel  :  at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
12-02 13:04:47.711  2450  3128 E Parcel  :  at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
12-02 13:04:47.711  2450  3128 E Parcel  :  ... 19 more
12-02 13:04:47.711  2450  3128 V ApplicationPolicy: isApplicationStateBlocked userId 0 pkgname com.android.vending

  • Haben Sie eine Lösung für dieses Problem gefunden? Ich habe genau das gleiche Problem, tatsächlich hat meine veröffentlichte Version dieses Problem auch. Käufe werden also durchgeführt, aber mein OnIabPurchaseFinishedListener wird nie aufgerufen, sodass der Kauf nie sofort aktiviert wird. Der lustige Teil ist, dass der Kauf auf dem Google-Server registriert wird, sodass der Benutzer den Kauf sehen kann, wenn er die App erneut öffnet.

    – MRK

    11. Juni 2015 um 7:38 Uhr

  • Hattest du bisher Glück, MRK?

    – gogonapel

    22. Juni 2015 um 10:39 Uhr

  • Hast du die Lösung gefunden??

    – KAndroid

    7. Juli 2015 um 8:14 Uhr

  • Immer wenn ich die Liste der zu kaufenden Dinge mit dem Adapter erstelle, gehe ich die gekauften, aber nicht verbrauchten Artikel durch und verbrauche sie, bevor ich die Liste erstelle. Auf diese Weise kann ich sicherstellen, dass alle Elemente verbraucht werden, wenn der Benutzer die Liste überprüft. Wir erfassen die gekauften Artikel des Benutzers in unserem eigenen Backend, sodass der Konsum von Artikeln keinen großen Einfluss auf die dem Benutzer angezeigten Artikel hat.

    – lordisch

    8. Juli 2015 um 8:51 Uhr

  • Wie erwartest du Antworten zu bekommen, ohne sie freizugeben irgendein Code/Beispiel? Das Protokoll ist ohne Kontext nutzlos

    – RoyalBigMack

    10. Februar um 15:20 Uhr

Benutzer-Avatar
Raúl Lapeira Herrero

Dieses Problem hat in Stackoverflow die Runde gemacht, wenn dieses Problem ist richtig Es hängt mit einer falschen Reflektion zusammen, die versucht, eine Klasse zu laden, die nicht vorhanden ist, wenn ein Parameter in Ihrem Code null ist

Es sieht so aus, als ob zwischen PurchaseAsync und dem HandleActivityResult-Callback eine Race-Bedingung besteht. tcsPurchase wird nach dem Aufruf von serviceConnection.Service.GetBuyIntent festgelegt, was meiner Meinung nach den HandleActivityResult-Aufruf ermöglicht, während tcsPurchase noch null ist. Wenn ich eine leere Zeichenfolge für die “Nutzlast” übergebe, wird sie als null deserialisiert, wodurch der Vergleich bei der Erfolgsprüfung fehlschlägt.

Stellen Sie also sicher, dass die Nutzlast nicht null ist, bevor Sie diese Methode aufrufen.

1204860cookie-checkErfolgreicher Kauf, aber “Klasse nicht gefunden” beim Unmarshalling: com.google.android.finsky.billing.lightpurchase.PurchaseParams

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy