2014-03-27 40 views
0

对于团购,我有代码mHelper.launchPurchaseFlow启动两次

public void onClick(View v) 
{    
     // FIRST CHECK IF THE USER IS ALREADY A SUBSCRIBER. 
     mHelper.launchPurchaseFlow(SubscribeIntroActivity.this, SUBSCRIBE_SKU, RC_REQUEST, mPurchaseFinishedListener);  
} 


public void onClick(View v) 
{    
     // FIRST CHECK IF THE USER IS ALREADY A SUBSCRIBER. 
     mHelper.launchPurchaseFlow(SubscribeIntroActivity.this, SUBSCRIBE_SKU, RC_REQUEST, mPurchaseFinishedListener);  
} 

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 
     Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase); 

     // if we were disposed of in the meantime, quit. 
     if (mHelper == null) return; 

     if (result.isFailure()) { 
      Log.d(TAG,"Error purchasing: " + result); 

      return; 
     } 
     if (!verifyDeveloperPayload(purchase)) { 
      Log.d(TAG,"Error purchasing. Authenticity verification failed."); 

      return; 
     } 

     Log.d(TAG, "Purchase successful."); 

     if (purchase.getSku().equals(SKU_PREMIUM)) { 
      // bought the premium upgrade! 
      Log.d(TAG, "Purchase is premium upgrade. Congratulating user."); 
      Log.d(TAG,"Thank you for upgrading to premium!"); 
      mIsPremium = true; 
      isShortVersion=false; 
      DrawIsShortVersion(); 
     } 

     } 
    }; 

错误日志

Caused by: java.lang.IllegalStateException: Can't start async operation (launchPurchaseFlow) because another async operation(launchPurchaseFlow) is in progress. 

当我点击按钮,它的开放买家对话,我可以没有任何问题买,但如果我点击按钮对话框打开,在设备上推回上的硬件按钮(没买)我看到第一个活动按钮买,推它再次购买,并提出错误。可能有人知道这个错误?我做错了什么?

...添加如果(mHelper!= null)mHelper.flagEndAsync();之前调用launchPurchaseFlow,现在没有错误,但是mHelper.flagEndAsync();杀previos任务?

回答

0

你可以发布你的日志吗? 在大多数情况下,当异步PurcaseFlow正在运行并且您尝试运行其他Purcase时会发生错误。 你在Purcase Listener中做什么?

编辑:您有多个Coices做的是:

第一:创建一个全局布尔 - > mTaskIsRunning;

private void doBuyProduct(int id){ 
    if(!mTaskIsRunning){ 
    mHelper.launchPurchaseFlow(SubscribeIntroActivity.this, SUBSCRIBE_SKU, RC_REQUEST, mPurchaseFinishedListener); 
    mTaskIsRunning=true; 
} 
} 

然后在监听器: ....

mTaskIsRunning=false; 

或在任务正在运行 相同的过程,你可以禁用按钮:

private void doBuyProduct(int id){ 
     disableBuyButtons(); 
     mHelper.launchPurchaseFlow(SubscribeIntroActivity.this, SUBSCRIBE_SKU, RC_REQUEST, mPurchaseFinishedListener); 


    } 

,并在FinishListener :

enableButtons();