检查应用程序内购买
问题描述:
根据查询购买的商品中的https://developer.android.com/training/in-app-billing/purchase-iab-products.html的指示,我正在检查购买的商品。检查应用程序内购买
我的代码如下所示:
private void lookForPurchases() {
IabHelper.QueryInventoryFinishedListener lookForPurchasesListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
if (result.isFailure()) {
Log.e(TAG, "Error checking for purchases:" + result.toString());
}
else {
Log.d(TAG, "Processing purchases." + inventory.toString());
if(inventory.hasPurchase(SKU_LEXCOINS_100)){
Purchase purchase = inventory.getPurchase(SKU_LEXCOINS_100);
consumeCoinPurchase(purchase);
}
if(inventory.hasPurchase(SKU_LEXCOINS_550)){
Purchase purchase = inventory.getPurchase(SKU_LEXCOINS_550);
consumeCoinPurchase(purchase);
}
if(inventory.hasPurchase(SKU_LEXCOINS_1200)){
Purchase purchase = inventory.getPurchase(SKU_LEXCOINS_1200);
consumeCoinPurchase(purchase);
}
}
}
};
Log.i(TAG, "Looking for purchases");
if(inAppBillingHelper == null) {
Log.e(TAG, "Null preventing query inventory");
} else {
try {
inAppBillingHelper.queryInventoryAsync(lookForPurchasesListener);
} catch (IabHelper.IabAsyncInProgressException ex) {
Log.e(TAG, "Error retrieving purchases.", ex);
}
}
}
在日志中,虽然,我得到的是“寻找购买”没事的最后一件事以下。看起来我应该在任何分支上找点东西,所以,有没有人看到我做错了什么?
没有错误或任何东西,它只是从来没有回来。
答
问题出在IabHelper(谷歌代码)深处的行handler.post
,它正在执行我传入的回调。handler.post被调用,购买我的回调从来没有。我不确定这是怎么发生的。
我用一个AsyncTask替换了handler.post,并在onPostExecute
方法中发布了我的回调函数,以使它在UI线程上运行。这似乎解决了我的问题。