2016-02-28 142 views
1

我在尝试再次购买商品时遇到以下错误。请不要将其作为重复关闭。我知道堆栈溢出中有很多这样的问题,但似乎没有任何帮助。请参阅我的代码。无法购买商品,错误回复:7:商品已拥有

public class BtnListener implements View.OnClickListener 
{ 
    // On-click event handler for all the buttons 
    @Override 
    public void onClick(View view) 
    { 
     switch (view.getId()) 
     { 

      case R.id.TwoSeconds: 
       mHelper.launchPurchaseFlow(TimeBoosterActivity.this, ITEM_SKU, 10001, 
         mPurchaseFinishedListener, "2"); 
       break; 
     } 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, 
           Intent data) 
{ 
    if (!mHelper.handleActivityResult(requestCode, 
      resultCode, data)) { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener 
     = new IabHelper.OnIabPurchaseFinishedListener() { 
    public void onIabPurchaseFinished(IabResult result, 
             Purchase purchase) 
    { 
     if (result.isFailure()) { 
      // Handle error 
      return; 
     } 
     else if (purchase.getSku().equals(ITEM_SKU)) { 
      consumeItem(); 
      //buyButton.setEnabled(false); 

     } 

    } 
}; 

public void consumeItem() { 
    mHelper.queryInventoryAsync(mReceivedInventoryListener); 
} 

IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener 
     = new IabHelper.QueryInventoryFinishedListener() { 
    public void onQueryInventoryFinished(IabResult result, 
             Inventory inventory) { 

     if (result.isFailure()) { 
      Toast.makeText(getApplicationContext(), "Failed to consume item", 
        Toast.LENGTH_SHORT).show(); 
     } else { 
      mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU), 
        mConsumeFinishedListener); 
     } 
    } 
}; 

IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = 
     new IabHelper.OnConsumeFinishedListener() { 
      public void onConsumeFinished(Purchase purchase, 
              IabResult result) { 

       if (result.isSuccess()) { 
        String getSeconds=purchase.getDeveloperPayload(); 
        SharedPreferences saveTwoSeconds=getSharedPreferences(getSeconds, Context.MODE_PRIVATE); 
        //clickButton.setEnabled(true); 
       } else { 
        // handle error 
        Toast.makeText(getApplicationContext(), "Failed to consume item", 
          Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }; 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mHelper != null) mHelper.dispose(); 
    mHelper = null; 
} 

回答

0

首先,你需要清楚为什么你得到这个错误(错误响应:7:项目已经拥有)

有一些常见的情况:

①你只买意达和尚未消耗;

②另一人(使用与你相同的谷歌帐户)只是买这个意达

在案例1:只需消耗意达,你就可以重新购买。

情况2:您需要重新启动或删除谷歌播放服务并播放商店缓存。然后使用相同的谷歌播放帐户消耗itemA。

在情况2中,itemA的收据信息未存储在您的设备中。您重新启动或删除Google Play服务并播放商店缓存,以便向Google商店发送应用内结算请求,以获取购买的收据信息。所以你不能消费并再次购买。

0

我认为您的消费购买没有被onActivityResult中的代码调用。

尝试用下面的代码

@Override 
    protected void onActivityResult(int requestCode, int resultCode, 
          Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 
if (requestCode == <Code you sent during launching purchase flow> || requestCode == <Code you sent during launching consume flow>) 
    mHelper.handleActivityResult(requestCode,resultCode, data)) 
    } 
} 
相关问题