我正在做一个项目,我需要把它变成消费品。
点击购买按钮后,使用以下代码进行消费。
inventory=new Inventory();
mHelper.consumeAsync(inventory.getPurchase(SKU_SUCCESS),mConsumeFinishedListener1);
但它在 IabHelper 类中出现“此处购买的空指针异常”。
void consume(Purchase itemInfo) throws IabException {
checkSetupDone("consume");
if (!itemInfo.mItemType.equals(ITEM_TYPE_INAPP)) {
throw new IabException(IABHELPER_INVALID_CONSUMPTION,
"Items of type '" + itemInfo.mItemType
+ "' can't be consumed.");
}
try {
String token = itemInfo.getToken();
String sku = itemInfo.getSku();
if (token == null || token.equals("")) {
logError("Can't consume " + sku + ". No token.");
throw new IabException(IABHELPER_MISSING_TOKEN,
"PurchaseInfo is missing token for sku: " + sku + " "
+ itemInfo);
}
如果有人对此有任何想法,请告诉我。
consumeAsync() 的代码
public void consumeAsync(Purchase purchase, OnConsumeFinishedListener listener) {
checkSetupDone("consume");
List<Purchase> purchases = new ArrayList<Purchase>();
purchases.add(purchase);
consumeAsyncInternal(purchases, listener, null);
}
public void consumeAsync(List<Purchase> purchases, OnConsumeMultiFinishedListener listener) {
checkSetupDone("consume");
consumeAsyncInternal(purchases, null, listener);
}
最佳答案
看来您使用的是 Google 的 marketbilling project ,这是我今天偶然发现的。我不知道这是否是进行应用内结算的“标准”方式,但了解您从一开始就在使用它会很有帮助。
无论如何,Inventory
类也是该项目的一部分。当您执行以下 inventory=new Inventory();
时,您正在创建一个空的 Inventory
对象。那么,inventory.getPurchase(SKU_SUCCESS)
将返回 null 也就不足为奇了:
/** Returns purchase information for a given product, or null if there is no purchase. */
public Purchase getPurchase(String sku) {
return mPurchaseMap.get(sku);
}
您将该值传递给 mHelper.consumeAsync
,后者最终将其作为 itemInfo
传递给 consume
。当消费执行检查 !itemInfo.mItemType.equals(ITEM_TYPE_INAPP)
时,您会得到空指针异常。
简而言之,将有效的 Purchase
对象传递给 consumeAsync
方法。
关于java - 如何使 Android 产品成为消费品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566417/