IabHelper(类)Dispose(方法)未处理的异常

时间:2017-04-03 08:52:09

标签: java android

我试图在我最新的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;
    }

我该怎么做才能解决此错误? 我知道我应该抓住并且例外但是我没有足够的信心自己改变这个方法。

(感谢您的帮助)

1 个答案:

答案 0 :(得分:3)

经过更多的研究,我发现这个问题已经被问及并得到了解答。 不幸的是,这个问题仍然没有得到回答。 这里有link to the original question

解决方案很简单:

  1. 您可以从指南中获取的文件已过时,应该从github下载。
  2. 在方法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;
       }
    }
    
  3. disposeWhenFinished这是一个更优雅的解决方案,效果优于dispose