【问题标题】:PayPal Button Error in Android ApplicationAndroid 应用程序中的 PayPal 按钮错误
【发布时间】:2013-03-12 21:23:27
【问题描述】:

我正在尝试让 PayPal 按钮在我的 Android 应用中的 Checkout Activity 中工作。但我得到一个空指针异常,它指的是我的代码中的第 1585 行。 logcat输出如下:

03-22 21:27:28.659: W/dalvikvm(419): threadid=1: thread exiting with uncaught exception (group=0x40014760)
03-22 21:27:28.669: E/AndroidRuntime(419): FATAL EXCEPTION: main
03-22 21:27:28.669: E/AndroidRuntime(419): java.lang.NullPointerException
03-22 21:27:28.669: E/AndroidRuntime(419):  at java.math.BigDecimal.<init>(BigDecimal.java:406)
03-22 21:27:28.669: E/AndroidRuntime(419):  at com.fokrul.justdeals.ActivityTab$PaypalTask$1.onClick(ActivityTab.java:1585)
03-22 21:27:28.669: E/AndroidRuntime(419):  at android.view.View.performClick(View.java:3110)
03-22 21:27:28.669: E/AndroidRuntime(419):  at com.paypal.android.MEP.CheckoutButton.onClick(Unknown Source)
03-22 21:27:28.669: E/AndroidRuntime(419):  at android.view.View.performClick(View.java:3110)
03-22 21:27:28.669: E/AndroidRuntime(419):  at android.view.View$PerformClick.run(View.java:11934)
03-22 21:27:28.669: E/AndroidRuntime(419):  at android.os.Handler.handleCallback(Handler.java:587)
03-22 21:27:28.669: E/AndroidRuntime(419):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-22 21:27:28.669: E/AndroidRuntime(419):  at android.os.Looper.loop(Looper.java:132)
03-22 21:27:28.669: E/AndroidRuntime(419):  at android.app.ActivityThread.main(ActivityThread.java:4123)
03-22 21:27:28.669: E/AndroidRuntime(419):  at java.lang.reflect.Method.invokeNative(Native Method)
03-22 21:27:28.669: E/AndroidRuntime(419):  at java.lang.reflect.Method.invoke(Method.java:491)
03-22 21:27:28.669: E/AndroidRuntime(419):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
03-22 21:27:28.669: E/AndroidRuntime(419):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
03-22 21:27:28.669: E/AndroidRuntime(419):  at dalvik.system.NativeStart.main(Native Method)

我的 PayPal 活动的 Onclick 方法代码如下:

class PaypalTask extends AsyncTask<Void, Void, Void> {
        protected final char[] TOTAL_GBP = null;

        public Void doInBackground(Void... arg0) {
            ppObject = PayPal.initWithAppID(getBaseContext(), "APP-80W284485P519543T", PayPal.ENV_SANDBOX);

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            btnPaypal = ppObject.getCheckoutButton(getApplicationContext(), PayPal.BUTTON_278x43, CheckoutButton.TEXT_PAY);
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            params.addRule(RelativeLayout.CENTER_HORIZONTAL);
            params.addRule(RelativeLayout.CENTER_VERTICAL);
            btnPaypal.setLayoutParams(params);
            rlPay.addView(btnPaypal);
            if(utils.prefs.getBoolean("isLogged", false)) btnPaypal.setVisibility(View.VISIBLE); else btnPaypal.setVisibility(View.GONE);

            btnPaypal.setOnClickListener(new OnClickListener(){
                public void onClick(View view) {

                    // to check whether there are any books in the shopping cart
                    if(!cid.isEmpty()){
                        PayPalPayment payment = new PayPalPayment();
            <<LINE 1585-->>>>> payment.setSubtotal(new BigDecimal(TOTAL_GBP));
                        payment.setCurrencyType("USD");
                        payment.setRecipient(Utils.PAYPAL_ACCOUNT);
                        payment.setPaymentType(PayPal.PAYMENT_TYPE_GOODS);
                        Intent checkoutIntent = PayPal.getInstance().checkout(payment, getBaseContext());
                        startActivityForResult(checkoutIntent, 1);
                    }else{
                        utils.showToast("Your shopping cart is empty.");
                        // The PayPal button needs to be updated so that the user can click on it again.
                        btnPaypal.updateButton();
                    }
                }   
            });
        }
    }

你有什么想法吗?

【问题讨论】:

  • 这意味着您的 TOTAL_GBP 是 null 您不能将 null 作为构造函数参数传递:)
  • @Sergey Benner 谢谢!!那么我可以为 TOTAL_GBP 分配什么价值?如果我将其更改为 int 类型,PayPal 会给出 Invalid Payment Type 错误!
  • 尝试通常的 payment.setSubtotal(new BigDecimal("8.25"));也检查此链接androiddevelopement.blogspot.com/2011/04/…
  • @Sergey Benner 你是明星!!很好的解释和它的工作:)
  • 如果你能回答,我可以投票给你..

标签: java android eclipse paypal


【解决方案1】:

显而易见的答案是来自 cmets 的回顾:

protected final char[] TOTAL_GBP = null;

不要将 null 设置为 BigDecimal(TOTAL_GBP) 的构造函数参数 @payment.setSubtotal(new BigDecimal(TOTAL_GBP));

示例: payment.setSubtotal(new BigDecimal("8.25")); 取自 http://androiddevelopement.blogspot.com/2011/04/adding-paypal-payment-in-android.html 这里关于 paypal 和 android 的集成。

最后但并非最不重要的:

您可能还想重新考虑您的AsyncTask 流程和doInBackground() 方法 而您的onPostExecute(),您通常不会在AsyncTask 中设置onClick() 侦听器。 他们宁愿必须在您的活动中并在您的主线程中运行 只需单击一个按钮,您就可以调用AsyncTask 的执行。

关于 AsyncTasks 的更多信息: http://developer.android.com/reference/android/os/AsyncTask.html AsyncTask Android example


希望它能澄清一点。

干杯

【讨论】:

  • 我的问题的最佳答案! :)
猜你喜欢
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多