Java Android应用程序中的PayPal按钮错误

Java Android应用程序中的PayPal按钮错误,java,android,eclipse,paypal,Java,Android,Eclipse,Paypal,我正在尝试让我的Android应用程序中的PayPal按钮在结账活动中工作。但是我得到了一个空指针异常,它引用了我代码中的第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: m

我正在尝试让我的Android应用程序中的PayPal按钮在结账活动中工作。但是我得到了一个空指针异常,它引用了我代码中的第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)
03-22 21:27:28.659:W/dalvikvm(419):threadid=1:线程以未捕获异常退出(组=0x40014760)
03-22 21:27:28.669:E/AndroidRuntime(419):致命异常:main
03-22 21:27:28.669:E/AndroidRuntime(419):java.lang.NullPointerException
03-22 21:27:28.669:E/AndroidRuntime(419):在java.math.BigDecimal.(BigDecimal.java:406)
03-22 21:27:28.669:E/AndroidRuntime(419):在com.fokrul.justdeals.ActivityTab$PaypalTask$1.onClick(ActivityTab.java:1585)
03-22 21:27:28.669:E/AndroidRuntime(419):在android.view.view.performClick(view.java:3110)上
03-22 21:27:28.669:E/AndroidRuntime(419):在com.paypal.android.MEP.checkburutton.onClick(未知来源)
03-22 21:27:28.669:E/AndroidRuntime(419):在android.view.view.performClick(view.java:3110)上
03-22 21:27:28.669:E/AndroidRuntime(419):在android.view.view$PerformClick.run(view.java:11934)
03-22 21:27:28.669:E/AndroidRuntime(419):在android.os.Handler.handleCallback(Handler.java:587)上
03-22 21:27:28.669:E/AndroidRuntime(419):在android.os.Handler.dispatchMessage(Handler.java:92)上
03-22 21:27:28.669:E/AndroidRuntime(419):在android.os.Looper.loop(Looper.java:132)
03-22 21:27:28.669:E/AndroidRuntime(419):位于android.app.ActivityThread.main(ActivityThread.java:4123)
03-22 21:27:28.669:E/AndroidRuntime(419):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-22 21:27:28.669:E/AndroidRuntime(419):在java.lang.reflect.Method.invoke(Method.java:491)
03-22 21:27:28.669:E/AndroidRuntime(419):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
03-22 21:27:28.669:E/AndroidRuntime(419):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
03-22 21:27:28.669:E/AndroidRuntime(419):在dalvik.system.NativeStart.main(本机方法)
我的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();
                    }
                }   
            });
        }
    }
class PaypalTask扩展了AsyncTask{
受保护的最终字符[]总数_GBP=null;
公共Void doInBackground(Void…arg0){
ppObject=PayPal.initWithAppID(getBaseContext(),“APP-80W284485P519543T”,PayPal.ENV_沙盒);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
btnPaypal=ppObject.getcheckburatton(getApplicationContext(),PayPal.BUTTON_278x43,checkburatton.TEXT_PAY);
RelativeLayout.LayoutParams params=新的RelativeLayout.LayoutParams(LayoutParams.WRAP\u内容,LayoutParams.WRAP\u内容);
参数addRule(相对中心水平);
参数addRule(相对中心垂直);
BTNPapal.setLayoutParams(参数);
rlPay.addView(btnpypal);
if(utils.prefs.getBoolean(“isLogged”,false))btnPaypal.setVisibility(View.VISIBLE);else btnPaypal.setVisibility(View.GONE);
setOnClickListener(新的OnClickListener(){
公共void onClick(视图){
//检查购物车里是否有书
如果(!cid.isEmpty()){
PayPalPayment付款=新PayPalPayment();
>>>付款。设置总额(新的大小数(总额为英镑));
付款。设置货币类型(“美元”);
payment.setRecipient(Utils.PAYPAL_账户);
payment.setPaymentType(PayPal.payment\u TYPE\u商品);
Intent checkoutinent=PayPal.getInstance().checkout(付款,getBaseContext());
startActivityForResult(检查内容,1);
}否则{
utils.showtoos(“您的购物车是空的。”);
//贝宝按钮需要更新,以便用户可以再次点击它。
btnpapal.updateButton();
}
}   
});
}
}

有没有想到这里可能会出什么问题?

显而易见的答案是对评论的重述:

protectedfinal char[]TOTAL_GBP=null

不要将
null
设置为BigDecimal(TOTAL_GBP)的构造函数参数 @付款。设置总额(新的大小数(总额为英镑))

例如:
payment.setSubtotal(新的BigDecimal(“8.25”)
这是关于paypal和android的整合

最后但并非最不重要的是:

您可能还需要重新考虑
AsyncTask
过程和
doInBackground()
方法 而您的
onPostExecute()
通常不会在
AsyncTask
中设置
onClick()
侦听器。 他们应该在你的活动中,然后在你的主线程中运行 在一个按钮点击中,您可以调用执行
AsyncTask

有关异步任务的更多信息:


希望能澄清一点


干杯

这意味着您的总英镑是
null
您不能将null作为构造函数参数传递:)@Sergey Benner谢谢!!那么,我可以为TOTAL_GBP指定什么值?如果我将其更改为int类型,PayPal将给出
无效的支付类型
错误!试试普通的付款方式。setSubtotal(新的BigDecimal(“8.25”);也检查一下这个链接@Sergey Benner你是明星!!解释得很好,而且很有效:)如果你能回答,那么我可以投你一票。。我问题的最佳答案!:)