2013-02-13 58 views
0

我有这样的代码,我试图通过this.thecostpublic void click()方法,但它看起来是不工作,因为我收到“Paymnet失败”点击PayPal按钮时。如何将类中的数据传递给其他成员?

我出了什么问题?

顺便说一句,你叫什么private {}private void {} - 所有这些功能()的东西?

private void initUI(int theprice) { 

     launchPayPalButton = mPayPal.getCheckoutButton(this, 
       PayPal.BUTTON_278x43, CheckoutButton.TEXT_PAY); 

     LinearLayout.LayoutParams params = new 
       LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
         LayoutParams.WRAP_CONTENT); 

     params.bottomMargin = theprice; 
     this.thecost = theprice; 

     launchPayPalButton.setLayoutParams(params); 
     launchPayPalButton.setOnClickListener(this); 

     ((LinearLayout)findViewById(R.id.main_layout2)).addView(launchPayPalButton); 
    } 

    public void onClick(View v) { 
     payWithPaypal(this.thecost); 
    } 


private void payWithPaypal(Integer gg) { 
     PayPalPayment newPayment = new PayPalPayment(); 
     BigDecimal bigDecimal=new BigDecimal(gg); 
     newPayment.setSubtotal(bigDecimal); 
     newPayment.setCurrencyType(Currency.getInstance(Locale.US)); 
     newPayment.setRecipient("[email protected]"); 
     newPayment.setMerchantName("My Merchant"); 
     Intent paypalIntent = PayPal.getInstance().checkout(newPayment, this); 
     this.startActivityForResult(paypalIntent, 1); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     switch(resultCode) { 
     case Activity.RESULT_OK: 
      String payKey = data.getStringExtra(PayPalActivity.EXTRA_PAY_KEY); 
      data.getStringExtra(PayPalActivity.EXTRA_PAY_KEY); 
      Toast.makeText(this,"Paymnet Successful",Toast.LENGTH_LONG).show(); 
      break; 
     case Activity.RESULT_CANCELED: 
      Toast.makeText(this,"Paymnet Cancel",Toast.LENGTH_LONG).show(); 
      break; 
     case PayPalActivity.RESULT_FAILURE: 
      Toast.makeText(this,"Paymnet Failed",Toast.LENGTH_LONG).show(); 
      String errorID = 
      data.getStringExtra(PayPalActivity.EXTRA_ERROR_ID); 
      String errorMessage = 
        data.getStringExtra(PayPalActivity.EXTRA_ERROR_MESSAGE); 
      break; 

     } 

编辑:我叫initUI()在onCreate方法

再次编辑:我改变全局变量以“双”,因为价格通常有小数位。 现在我尝试为价值敬酒,我发现错误更清晰。吐司显示消息,传递的值是“0.0”。因此,“付款失败”和无效付款出现错误。

int eprice; 
    double thecost;  
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.detail); 

    //Data mSource = new Data; 
    Intent myLocalIntent = getIntent(); 
    Bundle myBundle = myLocalIntent.getExtras(); 



    eprice = myBundle.getInt("eprice"); 
    String epricetxt = myBundle.getString("eprice"); 

    Adapter mAdapter = new Adapter(this, mSource); 
    //details = (Data) mAdapter.getItem(pos); 





    TextView theprice = (TextView) findViewById(R.id.priceTxt); 
    theprice.setText("Price: $" + epricetxt); 





    this.setCost(eprice); 
    this.thecost = eprice; 



    //Paypal 
    mPayPal=PayPal.initWithAppID(this,Constants.PAYPAL_APP_ID,PayPal.ENV_SANDBOX); 

    initUI(eprice); 

} 

private void initUI(int theprice) { 

     launchPayPalButton = mPayPal.getCheckoutButton(this, 
       PayPal.BUTTON_278x43, CheckoutButton.TEXT_PAY); 

     LinearLayout.LayoutParams params = new 
       LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
         LayoutParams.WRAP_CONTENT); 

     params.bottomMargin = theprice; 
     this.thecost = theprice; 
     launchPayPalButton.setLayoutParams(params); 
     launchPayPalButton.setOnClickListener(this); 

     ((LinearLayout)findViewById(R.id.main_layout2)).addView(launchPayPalButton); 
    } 

    public void onClick(View v) { 
     // 
     payWithPaypal(getCost()); 
    } 

    public void setCost(int cost) { 
     this.thecost = cost; 
    } 

    public double getCost() { 
     return this.thecost; 
    } 


    private void payWithPaypal(Double gg) { 
     PayPalPayment newPayment = new PayPalPayment(); 
     Toast.makeText(getApplicationContext(),gg.toString(), Toast.LENGTH_LONG).show(); 
     BigDecimal bigDecimal=new BigDecimal(gg); 
     newPayment.setSubtotal(bigDecimal); 
     newPayment.setCurrencyType(Currency.getInstance(Locale.US)); 
     newPayment.setRecipient("[email protected]"); 
     newPayment.setMerchantName("My Merchant"); 
     Intent paypalIntent = PayPal.getInstance().checkout(newPayment, this); 
     this.startActivityForResult(paypalIntent, 1); 
    } 
+0

你确定它是因为成本而没有成功,而没有其他原因吗?错误消息中有什么? – kufudo 2013-02-13 02:46:49

+0

似乎没有'thecost'字段的问题。你是否在onActivityResult()中检查了'errorID'和'errorMessage'? – sandrstar 2013-02-13 02:47:42

+0

hmm ...我检查但没有错误。但我想知道为什么当我把 public void onClick(View v){ payWithPaypal(10); } 它的工作原理。但是,当我把this.thecost,它不起作用 – OneNation 2013-02-13 02:59:15

回答

0

用我最更新的代码,我不知道为什么我的EPRICE不起作用。但我有其他解决方案。我需要做的是改变

initUI(EPRICE);

initUI(Double.valueOf(epricetxt));

0

我们没有足够的信息来告诉你哪里出了错。出于某种原因,PayPal API返回了失败状态代码。也许你没有互联网连接?

检查你在这一行中检索到的错误消息字符串的值:

String errorMessage = data.getStringExtra(PayPalActivity.EXTRA_ERROR_MESSAGE); 

您可以使用调试器来检查它,或者使用Log.e功能Logger类将其记录到Logcat所以你可以阅读它。

至于你的第二个问题:

顺便说一下,你叫什么私人{}私人无效{} - 所有这些功能()看的东西?

在Java中,这些 “功能寻找的东西” 被称为方法。

编辑:好的,现在你已经向我们展示你的onCreate方法,我能看到你得到你最终传递给这里的OnInit值:

eprice = myBundle.getInt("eprice"); 

这样做意味着你救了在onSaveInstanceState(Bundle)

你做捆绑先前价值?当您第一次启动活动时,它如何获得价值?

+0

嗯...编辑更多细节 – OneNation 2013-02-13 03:49:15

+0

嗨,我现在看到更清晰的错误。传递给点击方法的值是'0.0'。我不知道是什么导致它 – OneNation 2013-02-13 06:46:46

+0

好吧,所以你必须弄清楚从哪里来。您在onCreate中获得了该包的价值,但尚不清楚将其放入捆绑包的位置。我再次编辑我的答案与更多的信息。 – mattgmg1990 2013-02-13 13:45:55

相关问题