java - 如何使 Android 产品成为消费品

标签 java android

我正在做一个项目,我需要把它变成消费品。

点击购买按钮后,使用以下代码进行消费。

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/

相关文章:

java - 通过反序列化代码更改数据

java - 有没有办法只搜索特定种类的书籍,例如使用 Google Book Search API 的教科书?

java - 将哈希集打印到屏幕上

java - 工具栏上添加的操作按钮未显示

android - 我可以测试我的 thread looper 是否完成了它的消息吗?

java - 需要正则表达式来匹配android 4.2.1及以上版本

java - 有没有更好的方法来编写与我相同的代码?

java - 将 JWindow 用于 float 工具窗口会导致所有者窗口在单击 float 窗口时变为 "flicker"

java - 静态 java 字符串周围的奇怪引号字符(在 android 上?)

android - 如何检测用户何时点击 Android 中的 View