2017-01-11 122 views
0

我该如何多次购买一件东西?这里是我的代码:Android应用内结算 - 如何多次购买单个应用内购买?

// [...] 
    String base64EncodedPublicKey = 
       "MIIB...; 

     mHelper = new IabHelper(this, base64EncodedPublicKey); 

     mHelper.startSetup(new 
            IabHelper.OnIabSetupFinishedListener() { 
             public void onIabSetupFinished(IabResult result) { 
              if (!result.isSuccess()) { 
               Toast.makeText(gift.this, "Setup no Success", Toast.LENGTH_SHORT).show(); 
               Log.d(TAG, "In-app Billing setup failed: " + result); 
              } else { 
               Toast.makeText(gift.this, "Setup Success", Toast.LENGTH_SHORT).show(); 
              } 
             } 
            }); 


    } 


    public void insert(View view) { 
     mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001, 
       mPurchaseFinishedListener, "mypurchasetoken"); 
    } 

    @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()) { 
       Toast.makeText(gift.this, "Error 1", Toast.LENGTH_SHORT).show(); 
      } 
      else if (purchase.getSku().equals(ITEM_SKU)) { 
       consumeItem(); 
       Toast.makeText(gift.this, "OK 1", Toast.LENGTH_SHORT).show(); 
       // mHelper.consumeAsync(purchase, mConsumeFinishedListener); 
      } 

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

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

      if (result.isFailure()) { 
       Toast.makeText(gift.this, "Error 2", Toast.LENGTH_SHORT).show(); 
      } else { 
       mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU), 
         mConsumeFinishedListener); 
       Toast.makeText(gift.this, "OK 2", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 
    IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = 
      new IabHelper.OnConsumeFinishedListener() { 
       public void onConsumeFinished(Purchase purchase, 
               IabResult result) { 

        if (result.isSuccess()) { 
         Toast.makeText(gift.this, "Success 1", Toast.LENGTH_SHORT).show(); 
         // mHelper.consumeAsync(purchase, mConsumeFinishedListener); 
        } else { 
         Toast.makeText(gift.this, "Error 3", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }; 

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

当我在我的按钮,点击它说:“支付成功”之后,当我点击我的按钮,再不会做任何事情。

我有2个问题:

  1. 如何购买一个应用程序内购买多次吗?
  2. 如何在支付成功后显示Toast?

感谢您的回答。

回答

1
  1. 购买必须在每次购买后消耗,然后可以再次购买。如果您能够购买一次,但不能再次购买,那么几乎可以肯定的是,问题在于您没有正确使用它。

  2. 你的代码似乎没有任何问题,Toast.makeText(...)应该可以正常工作。

+0

我该如何正确使用它? – Tms852

+0

调试您的代码并查看正在报告的消息,然后您会看到它失败的位置。我建议使用System.out.println或同等功能,并从adb中读取消息,而不是使用Toasts进行调试。祝你好运! – TopCog

+0

另外,购买完成后无需查询库存。您可以立即从purchaseFinishedListener消费该物品。 – TopCog