Hôm nay tôi phát hiện ra một báo cáo tai nạn ứng dụng cho các ứng dụng Android của tôi liên quan đến stack trace sau:NullPointerException trong IabHelper.queryPurchases
java.lang.NullPointerException: Attempt to invoke interface method 'android.os.Bundle com.android.vending.billing.IInAppBillingService.getPurchases(int, java.lang.String, java.lang.String, java.lang.String)' on a null object reference
at com.myapp.utils.IabHelper.queryPurchases(IabHelper.java:878)
at com.myapp.utils.IabHelper.queryInventory(IabHelper.java:572)
at com.myapp.utils.IabHelper.queryInventory(IabHelper.java:545)
at com.myapp.utils.IabHelper$2.run(IabHelper.java:645)
at java.lang.Thread.run(Thread.java:818)
(số dòng được thay đổi từ bản gốc -Hoặc gì looks like to be the original, vì format tùy chỉnh)
Thông thường, một người sẽ sửa đổi mã của riêng mình để kiểm tra các thành viên chưa được chỉ định của lớp học. Vấn đề là mã này được sao chép & dán ngay từ Android SDK, vì IabHelper
là một lớp học mà Android SDK provides như là một điểm khởi đầu tốt cho việc thực hiện trong ứng dụng v3 Thanh toán
Dòng tội là lần thứ hai
logDebug("Calling getPurchases with continuation token: " + continueToken);
Bundle ownedItems = mService.getPurchases(3, mContext.getPackageName(), itemType, continueToken);
Dường như dịch vụ không được kết nối tại thời điểm phương thức được gọi. Lỗi này xảy ra trên thiết bị Nexus 5 (theo Bảng điều khiển dành cho nhà phát triển)
- Đây có phải là sự cố đã biết với Android 5 không?
- Có phiên bản cập nhật của Trình trợ giúp IAB không?
- Tôi có thể làm gì hơn là chỉnh sửa thủ công mã để xử lý NPE một cách nào đó?
IabHelper hiện đã lỗi thời và không còn được sử dụng nữa. Google đã phát hành thư viện BillingClient: https://developer.android.com/google/play/billing/billing_library.html – DSchmidt
Câu hỏi thực tế là rất cũ –
Câu hỏi này vẫn được xếp hạng rất cao trên Google. Tôi tình cờ gặp lỗi và phát hiện ra họ đã phát hành thư viện mới cách đây vài tuần. Đây chỉ là một lưu ý cho tất cả các nhà phát triển khác sắp tới. – DSchmidt