2013-02-13 3 views
0

У меня есть этот код, и я пытаюсь передать this.thecost методу public void click(), но похоже, что он не работает, потому что я получаю «Paymnet Failed» при нажатии кнопки 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 метода

EDITED РАЗ: изменить глобальные переменный «двойной», потому что цена, как правило, имеет десятичное место. Теперь я попытался подтолкнуть значение, и я вижу ошибку намного яснее. Тост отображает сообщение о том, что переданное значение равно «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

Вы уверены, что это неудачно из-за стоимости, а не по какой-либо другой причине? Что такое errorMessage? – kufudo

+0

Кажется, что нет поля с полем «thecost». Вы проверили «errorID» и «errorMessage», который вы получаете в onActivityResult()? – sandrstar

+0

hMM ... я проверяю, но без ошибок.Но мне интересно, почему, когда я положил public void onClick (View v) { payWithPaypal (10); } Это работает. Но когда я положил this.thecost, он не работал – OneNation

ответ

0

Используя мой самый обновленный код, я понятия не имею, почему мой eprice не работает. Но у меня есть альтернативное решение. Все, что мне нужно сделать, это изменить

initUI (eprice);

initUI (Double.valueOf (epricetxt));

0

У нас недостаточно информации, чтобы рассказать вам, что пошло не так. По какой-то причине API PayPal возвратил код состояния сбоя. Может быть, у вас нет интернет-соединения?

Проверьте значение строки сообщения об ошибке, что вы извлеченная в этой строке:

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

Вы можете использовать отладчик, чтобы проверить его, или использовать функцию Log.e в классе Logger, чтобы войти в его Logcat, чтобы вы могли прочитать его.

Что касается вашего второго вопроса:

, кстати, то, что вы называете частный {}, частная пустота {} - все те функции() ищет вещь?

В Java эти «функции выглядящие вещи» называются методами.

EDIT: Хорошо, теперь, когда вы показали нам свой OnCreate метод, я могу видеть, где вы получаете значение, которое в конечном итоге перейти на OnInit здесь:

eprice = myBundle.getInt("eprice"); 

Doing это означает, что вы спасли ранее в комплекте в onSaveInstanceState(Bundle)

Вы сделали это? Как он получает значение, когда вы начинаете действие в первый раз?

+0

hmm ... editted with more detail – OneNation

+0

Привет, я вижу ошибку намного понятнее. значение, переданное методу click, равно «0.0». И я не уверен, в чем причина. – OneNation

+0

Хорошо, так что вам нужно выяснить, откуда это взялось. Вы получаете ценность из пакета в onCreate, но неясно, где это было помещено в пакет. Я снова редактировал свой ответ с дополнительной информацией. – mattgmg1990

Смежные вопросы