2014-02-07 58 views
0

我正在使用应用内购买为我的测验应用购买coins.And我已经分别添加了2个硬币类别100硬币和500个硬币。我也增加了2个SKU.My两个硬币购买尽管我购买了100个硬币并消耗了100个硬币,但是当我再次购买500个硬币时,100个硬币被添加了,而不是500个。我真的需要一个帮助,因为我坚持了几个星期。这里是在消费应用申购代码关于应用内购买:Android

private void update() { 
    ArrayList<String> moreSkus = new ArrayList<String>(); 
    moreSkus.add(SKU); 
    moreSkus.add(SKU_500); 

    buyHelper.queryInventoryAsync(true, moreSkus, new QueryInventoryFinishedListener() { 
     @Override 
     public void onQueryInventoryFinished(IabResult result, Inventory inv) { 
      if(result.isSuccess()) { 
       // SkuDetails details = inv.getSkuDetails(SKU); 
       //String price = details.getPrice(); 

       //TextView tvPrice = (TextView)GameActivity.this.findViewById(R.id.textview_price); 
       // tvPrice.setText(price); 

       purchase = inv.getPurchase(SKU); 
       // purchase = inv.getPurchase(SKU_500); 
       purchase=inv.getPurchase(SKU_500); 
       if(purchase!=null) { 
       // buy100coins.setEnabled(false); 
        //coins_one_hundred.setVisibility(View.GONE); 
        // buy100coins.setVisibility(View.GONE); 


        buy100coins.setEnabled(false); 
        buy500coins.setEnabled(false); 


        //boughtcoins.setEnabled(true); 
        //boughtcoins.setVisibility(View.VISIBLE); 
        boughtcoins.setEnabled(true); 

       } else { 
        // buy100coins.setEnabled(true); 
        //coins_one_hundred.setVisibility(View.VISIBLE); 
        // buy100coins.setVisibility(View.VISIBLE); 
        buy100coins.setEnabled(true); 
        buy500coins.setEnabled(true); 

        //boughtcoins.setEnabled(false); 
        //boughtcoins.setVisibility(View.INVISIBLE); 
        boughtcoins.setEnabled(false); 

       } 

       Toast.makeText(GameActivity.this, "Successful got inventory!", Toast.LENGTH_SHORT).show(); 

      } else { 
       Toast.makeText(GameActivity.this, "Error getting inventory!", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
} 

和按钮,消耗

   boughtcoins = (Button) buycoinsdialog.findViewById(R.id.bought_coins); 
         //boughtcoins.setVisibility(View.GONE); 
         // if button is clicked, close the custom dialog 
         boughtcoins.setOnClickListener(new OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           Helper.playSound(getApplicationContext(), "click"); 
           buyHelper.consumeAsync(purchase, new OnConsumeFinishedListener() { 

            @Override 
            public void onConsumeFinished(Purchase purchase, IabResult result) { 
             if(result.isSuccess()) { 
              Toast.makeText(GameActivity.this, "Coins consumed!", Toast.LENGTH_SHORT).show(); 
              Helper.playSound(getApplicationContext(), "cash");          
               money += 100; 
               money_text.setText("$" + money); 

              try { 
               // Small HACK: Give the system some time to realize the consume... without the sleep here, 
               // you have to press "Update" to see that the item can be bought again... 
               Thread.sleep(600); 
               update(); 
              } catch(Exception e) { 
               // ignored 
              } 

             } else { 
              Toast.makeText(GameActivity.this, "Error consuming: "+result.getMessage(), Toast.LENGTH_SHORT).show(); 
             } 
            } 
           }); 


           buycoinsdialog.dismiss(); 


          } 
         }); 
+0

您要添加的钱+ = 100;只适用于两种购买。检查这个。 – Rama

+0

@Rama我试图将其改为500,即如果(purchase.getsku()。等于(SKU){}但它不起作用 –

+0

@Rama我不确定上面的代码即在update()方法内。添加第二个SKU到它? –

回答

0

它看起来如R无论用户选择何种方式,按照此线增加100个钱/硬币数:

money += 100; 

您在哪里处理500美元购买硬币?

+0

我试着加钱+ = 500但它不工作。你告诉我,如果上面的代码,即更新()方法是正确的吗?即是,添加第二个SKU? –

+0

你可以吗?请检查一下吗? –

+0

我以前曾经使用过应用程序内结算,但是我记不清楚...但是您的onConsumeFinished方法返回一个Purchase对象。是否可能有某种标识符让您知道进行了哪些购买?如果是这样,也许你可以这样做:if(purchase.code(SKU_500){money + = 500};有意义吗? –

0

你必须做如下

if(purchase.getSKU() == SKU_500){ 
money += 500; 
}else if(purchase.getSKU() == SKU_100){ 
money += 100; 
} 
0
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener2 
    = new IabHelper.OnIabPurchaseFinishedListener() { 
    public void onIabPurchaseFinished(IabResult result, 
        Purchase purchase) 
    { 
     if (result.isFailure()) { 
      // Handle error 
      return; 
    }else { 
if (purchase.getSku().equals(ITEM_SKU1)) { 
       // do things 
    }else if(purchase.getSku().equals(ITEM_SKU2){} 
} 

    } 
}; 

检查这一点,可以帮助你

+0

感谢上述代码。正如The Hungry Androider所讨论的那样,我改变了SKU包的名称并添加了代码按钮,它返回500 coins.but我的问题是可以使用两个android测试包? –

+0

您使用的是哪个ID。是否测试SKU或您的ID?如果您使用自定义ID,那么您可以指定您感兴趣的方式。但这些ID不能相似 – Rama

+0

我使用SKU SKU和SKU_500 –

0

//点击您的按钮调用此方法

if (mHelper!=null) mHelper.flagEndAsync(); 
        mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001, 
          mPurchaseFinishedListener, ""); 
       } catch (Exception e) { 
        Toast.makeText(getApplicationContext(), "Please try after a few seconds"+e, Toast.LENGTH_SHORT).show(); 

实现监听器folloew :

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener 
     = new IabHelper.OnIabPurchaseFinishedListener() { 
     public void onIabPurchaseFinished(IabResult result, 
         Purchase purchase) 
     { 
      if (result.isFailure()) { 
       // Handle error 
       return; 
     }  
     else{ 

    mHelper.consumeAsync(purchase, mConsumeFinishedListener); 
     } 

     } 
    }; 

//实施监听 “mConsumeFinishedListener” 如下:

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

       if (result.isSuccess()) 
       {     
         if(purchase.getSKU().equals("android.test.purchase")){ 
}else if(purchase.getSKU().equals("android.test.cancel")){ 
} 


       } 
      } 
     }; 
+0

你必须以这种方式实施消耗品。 – Rama

+0

好的将尝试它:) –