Để kiểm tra trong thanh toán ứng dụng v3 cho Android, tôi đã triển khai hộp thoại thêm bộ điều hợp mục lựa chọn duy nhất. Tôi đã thêm Skus thử nghiệm, "android.test.purchased", "android.test.canceled", "android.test.refunded", "android.test.item_unavailable".Trong thanh toán ứng dụng v3 NullPointerException
Khi tôi sử dụng hộp thoại để khởi chạy quy trình mua hàng, mọi thứ đều ổn, tôi có thể mua mặt hàng và mặt hàng được mua chắc chắn nhất. Tuy nhiên, tôi nhận được một nullpointerexception khi ứng dụng của tôi sau đó cố gắng làm mới giao diện người dùng. Tôi biết công việc làm mới.
Dưới đây là logcat của tôi:
12-16 01:06:06.706: I/Running inventory query with(20846): android.test.purchased
12-16 01:06:06.706: I/Running details query with(20846): SkuDetails:{"title":"Sample Title","price":"£0.61","type":"inapp","description":"Sample description for product: android.test.purchased.","productId":"android.test.purchased"}
12-16 01:06:06.706: I/Running details query with(20846): SkuDetails:{"title":"Sample Title","price":"£0.61","type":"inapp","description":"Sample description for product: android.test.purchased.","productId":"android.test.purchased"}
12-16 01:06:06.706: I/Running inventory query with(20846): android.test.canceled
12-16 01:06:06.706: I/Running details query with(20846): null
12-16 01:06:06.706: I/Running details query with(20846): null
12-16 01:06:06.706: D/AndroidRuntime(20846): Shutting down VM
12-16 01:06:06.706: W/dalvikvm(20846): threadid=1: thread exiting with uncaught exception (group=0x40d12930)
12-16 01:06:06.706: E/AndroidRuntime(20846): FATAL EXCEPTION: main
12-16 01:06:06.706: E/AndroidRuntime(20846): java.lang.NullPointerException
12-16 01:06:06.706: E/AndroidRuntime(20846): at com.example.test.MainActivity$1.onQueryInventoryFinished(MainActivity.java:201)
12-16 01:06:06.706: E/AndroidRuntime(20846): at com.example.test.util.IabHelper$2$1.run(IabHelper.java:536)
12-16 01:06:06.706: E/AndroidRuntime(20846): at android.os.Handler.handleCallback(Handler.java:725)
12-16 01:06:06.706: E/AndroidRuntime(20846): at android.os.Handler.dispatchMessage(Handler.java:92)
12-16 01:06:06.706: E/AndroidRuntime(20846): at android.os.Looper.loop(Looper.java:137)
12-16 01:06:06.706: E/AndroidRuntime(20846): at android.app.ActivityThread.main(ActivityThread.java:5039)
12-16 01:06:06.706: E/AndroidRuntime(20846): at java.lang.reflect.Method.invokeNative(Native Method)
12-16 01:06:06.706: E/AndroidRuntime(20846): at java.lang.reflect.Method.invoke(Method.java:511)
12-16 01:06:06.706: E/AndroidRuntime(20846): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-16 01:06:06.706: E/AndroidRuntime(20846): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-16 01:06:06.706: E/AndroidRuntime(20846): at dalvik.system.NativeStart.main(Native Method)
for (String s : allSkus) {
Log.i("Running inventory query with", "" + s);
SkuDetails c = inv.getSkuDetails(s);
Log.i("Running details query with", "" + c);
if (inv.hasPurchase(s)) {
purchaseArray.add(c.getTitle());
} else {
**LINE 201** objects.add(c.getPrice() + " T:" + c.getSku());
}
allSkus là một ArrayList mà giữ 4 dòng sản phẩm trên.
Con trỏ trống là SkuDetails c = inv.getSkuDetails (s);
Trả về null khi làm mới giao diện người dùng. Nhưng vấn đề là nó dường như làm việc cho sku đầu tiên (android.test.purchased) nhưng là null cho sku thứ hai (android.test.canceled) và nó cũng chỉ là null khi nó chạy sau khi đã mua một mục khác (hoàn lại tiền hoặc mua). Tuy nhiên, nếu sau đó tôi mở nó lại, nó ổn và không có nullpointerexception được ném.
Nếu tôi thêm một kiểm tra null trước khi thêm vào các đối tượng ArrayList, sau đó có mặt hàng được thêm vào như tất cả các mục sau hoặc trước mục mua đang quay trở lại null trên inv.getSkuDetails (s)
Nó thực sự rất đơn giản mà là tuyệt vời cho một người mới như bản thân mình. Đầu tiên (giả sử bạn sử dụng nhật thực) chỉ nơi bạn tải xuống SDK, hãy xem trong phần tính năng bổ sung cho thanh toán trong ứng dụng. Một khi bạn làm điều đó, nếu bạn điều hướng đến thư mục android-sdk của bạn, nó có dưới extras> google> trong thanh toán ứng dụng v3 -> mẫu. Tất cả những gì bạn phải làm là nhập và sao chép các tệp util và thêm một số truy vấn và người nghe như được mô tả tại đây http://developer.android.com/training/in-app-billing/preparing-iab-app.html#GetSample – AndroidPenguin
Xin chào AndroidPenguin, Cảm ơn bạn đã trợ giúp. Hầu như được triển khai, chỉ có một sự nhầm lẫn hoặc có thể nói không hiểu từ liên kết của google rằng làm thế nào để khôi phục lại giao dịch. Nếu mỗi sản phẩm không thể được mua lại một lần nữa thì làm thế nào để có được thông tin rằng tôi đã mua sản phẩm. cảm ơn .. :) – LuminiousAndroid
Niềm vui của tôi! Đừng quên upvote. Việc mua truy vấn xảy ra ngay sau khi thiết lập thực hiện điều này. Miễn là bạn không tiêu thụ mua hàng của bạn tất nhiên. – AndroidPenguin