2013-03-22 46 views
0

我試圖在我的Android應用程序中的Checkout活動中獲取PayPal按鈕。但是我得到一個空指針異常,它在我的代碼中引用了1585行。該logcat的輸出如下:Android應用程序中的PayPal按鈕錯誤

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) 

我的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(); 
        } 
       } 
      }); 
     } 
    } 

任何思考什麼可能是錯誤怎麼回事?

+0

就意味着你TOTAL_GBP是'null'你不能將null作爲構造函數的參數:) – 2013-03-22 21:35:41

+0

@Sergey本納謝謝!什麼樣的價值,我可以分配到TOTAL_GBP呢?如果我將其更改爲int類型,則PayPal會給出「無效支付類型」錯誤! – 2013-03-22 21:39:02

+0

嘗試通常的payment.setSubtotal(new BigDecimal(「8.25」));請檢查此鏈接http://androiddevelopement.blogspot.com/2011/04/adding-paypal-payment-in-android.html – 2013-03-22 21:41:56

回答

0

答案顯然是從評論的回顧:

protected final char[] TOTAL_GBP = null;

不要設置null爲的BigDecimal(TOTAL_GBP)構造函數的參數 @ payment.setSubtotal(新的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()你平時不設置onClick()聽衆在AsyncTask。 他們應該寧願在你的活動和運行在你的主線程然後 在一個按鈕點擊你可以呼籲執行AsyncTask

更多AsyncTasks: http://developer.android.com/reference/android/os/AsyncTask.html AsyncTask Android example


希望它澄清此事位。

乾杯

+0

對我的問題的最佳答案! :) – 2013-03-22 22:09:31