我试图在我最新的Android项目中实现应用内购买。
为此,请按照guide进行操作。
一切顺利,直到我使用dispose
方法关闭与Play商店的任何通信。
我得到的是以下错误:
错误:(101,45)错误:未报告的异常IabAsyncInProgressException;必须被抓住或宣布被抛出
在以下代码段中:
@Override
public void onDestroy() {
super.onDestroy();
//Always unbind the with the store connection, otherwise performance degradation of the device may follow.
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
在深入研究IabHelper类(Java)后,我找到了dispose
方法。
这里是方法的代码:
/**
* Dispose of object, releasing resources. It's very important to call this
* method when you are done with this object. It will release any resources
* used by it such as service connections. Naturally, once the object is
* disposed of, it can't be used again.
*/
public void dispose() throws IabAsyncInProgressException {
synchronized (mAsyncInProgressLock) {
if (mAsyncInProgress) {
throw new IabAsyncInProgressException("Can't dispose because an async operation " +
"(" + mAsyncOperation + ") is in progress.");
}
}
logDebug("Disposing.");
mSetupDone = false;
if (mServiceConn != null) {
logDebug("Unbinding from service.");
if (mContext != null) mContext.unbindService(mServiceConn);
}
mDisposed = true;
mContext = null;
mServiceConn = null;
mService = null;
mPurchaseListener = null;
}
我该怎么做才能解决此错误? 我知道我应该抓住并且例外但是我没有足够的信心自己改变这个方法。
(感谢您的帮助)
答案 0 :(得分:3)
经过更多的研究,我发现这个问题已经被问及并得到了解答。 不幸的是,这个问题仍然没有得到回答。 这里有link to the original question。
解决方案很简单:
在方法onDestroy
中,您应该使用以下代码:
@Override
public void onDestroy() {
super.onDestroy();
//Always unbind the connection with the store, otherwise performance degradation of the device may follow.
if (mHelper != null) {
mHelper.disposeWhenFinished();
mHelper = null;
}
}
disposeWhenFinished
这是一个更优雅的解决方案,效果优于dispose
。