我第一次使用新的 v3 API 设置应用内结算。它在我的设备上运行正常,但我收到了其他用户的很多错误报告。
其中之一是:
java.lang.IllegalStateException: IAB helper is not set up. Can't perform operation: queryInventory
at my.package.util.iab.IabHelper.checkSetupDone(IabHelper.java:673)
at my.package.util.iab.IabHelper.queryInventory(IabHelper.java:462)
at my.package.util.iab.IabHelper$2.run(IabHelper.java:521)
at java.lang.Thread.run(Thread.java:1019)
另一种是:
java.lang.NullPointerException
at my.package.activities.MainActivity$4.onIabSetupFinished(MainActivity.java:159)
at my.package.util.iab.IabHelper$1.onServiceConnected(IabHelper.java:242)
我的活动实现遵循 Google 的示例代码(示例中所有引用的类均未受影响):
IabHelper mHelper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
mHelper = new IabHelper(this, IAB_PUBLIC_KEY);
mHelper.enableDebugLogging(true);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
// Oh noes, there was a problem.
return;
}
// Hooray, IAB is fully set up. Now, let's get an inventory of
// stuff we own.
mHelper.queryInventoryAsync(mGotInventoryListener); //***(1)***
}
});
}
// Listener that's called when we finish querying the items we own
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
if (!result.isFailure()) {
if (inventory.hasPurchase(SoundsGlobals.IAB_SKU_PREMIUM)){
//we are premium, do things
}
}
else{
//oops
}
}
};
@Override
protected void onDestroy() {
if (mHelper != null) {
mHelper.dispose();
mHelper = null;
}
super.onDestroy();
}
我假设这两个错误都源自标记为的行***(1)***
造成这些错误的原因是什么?如果我打电话queryInventoryAsync
仅在之内onIabSetupFinished
,怎么可能mHelper
为空,或者mHelper
是不是设置了?
有谁知道这个问题的解决方案吗?