2014-03-27 43 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();