- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在我的 Android 应用程序中处理 PayPal 沙盒支付时遇到困难。
一旦我点击“通过 PayPal 支付”按钮,我的应用程序就会崩溃并给我一个空指针异常。
这是我的 PayPalTask 和 PayPal 按钮 Java 代码 fragment :
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();
payment.setSubtotal(new BigDecimal(TOTAL_GBP));
payment.setCurrencyType("GBP");
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();
}
}
});
}
如果我更改以下行:
payment.setSubtotal(new BigDecimal(TOTAL_GBP));
任何双浮点值,例如:
payment.setSubtotal(new BigDecimal("30.00"));
然后它工作得很好,但从不从购物车中获取小计值(value),而只获取指定的总金额,即在本例中为 30.00 英镑
为了更加清晰,我的购物车列表 Java 代码 fragment 如下:
private void fillCartList(boolean boo){
// to delete the contents of the cartlists
this.deleteCartLists();
TOTAL_QTY = 0; TOTAL_GBP = 0;
int price, qty;
// if is not 0, first will parse all the rows to arraylists from sqlite stored on the phone
Cursor cursor = db.getJoinedTables();
if(cursor != null && cursor.getCount()!=0){
cursor.moveToFirst();
while(!cursor.isAfterLast()){
if(boo == false){
price = Integer.valueOf(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BPRICE)).replace("£", ""));
qty = cursor.getInt(cursor.getColumnIndex(justdealsDatabase.KEY_CQTY));
cid.add(cursor.getInt(cursor.getColumnIndex(justdealsDatabase.KEY_BID)));
cTitle.add(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BTITLE)));
cCode.add(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BCODE)));
cPrice.add(price + "£");
cImage.add(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BIMAGE)));
cQty.add(qty);
TOTAL_QTY += qty;
TOTAL_GBP += qty * price;
}else{
// to insert a new row to sales table on mysql db
postParameters.removeAll(postParameters);
price = Integer.valueOf(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BPRICE)).replace("£", ""));
qty = cursor.getInt(cursor.getColumnIndex(justdealsDatabase.KEY_CQTY));
//information will be parsed via PHP if the internet is working
postParameters.add(new BasicNameValuePair("bid", String.valueOf(cursor.getInt(cursor.getColumnIndex(justdealsDatabase.KEY_BID)))));
Log.i(DEBUG, utils.prefs.getString("username", ""));
postParameters.add(new BasicNameValuePair("user", utils.prefs.getString("username", "")));
postParameters.add(new BasicNameValuePair("sQty", String.valueOf(qty)));
postParameters.add(new BasicNameValuePair("sDate", String.valueOf(getCurrentDate())));
postParameters.add(new BasicNameValuePair("sTotal", String.valueOf(qty * price)));
String response = null;
try{
response = CustomHttpClient.executeHttpPost(Utils.LINK_SALES, postParameters).toString();
response = response.replaceAll("\\s+", "");
Log.i(DEBUG, response);
} catch (Exception e) {
Log.e(DEBUG, "Error at fillCartList(): " + e.toString());
}
}
cursor.moveToNext();
}
}
tvValueTotalQty.setText("" + TOTAL_QTY);
tvValueTotalGBP.setText(TOTAL_GBP + "£");
}
非常感谢您的建议和想法。非常感谢。
持卡人代码 fragment :
private static class CartHolder{
TextView tvPrice, tvTitle, tvQty, tvTotals;
public ImageView imgImage;
}
private class CartAdapter extends BaseAdapter{
private LayoutInflater inflater;
private ArrayList<String> list;
public CartAdapter(ArrayList<String> ll){
inflater = (LayoutInflater)ActivityTab.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
list = ll;
}
//number of items in the data set are linked by this Adapter.
public int getCount() {
return list.size();
}
// to get the data item associated with the specified position in the data set.
public Object getItem(int position) {
return list.get(position);
}
// to get the row id associated with the specified position in the list.
public long getItemId(int position) {
return position;
}
// to get a View that displays the data at the specified position in the data set.
public View getView(int position, View convertView, ViewGroup parent) {
CartHolder holder;
if(convertView == null){
convertView = inflater.inflate(R.layout.item_cart, null);
holder = new CartHolder();
holder.imgImage = (ImageView)convertView.findViewById(R.id.imgImage);
holder.imgImage.getLayoutParams().height = 80;
holder.imgImage.getLayoutParams().width = 80;
holder.tvQty = (TextView)convertView.findViewById(R.id.tvNr);
holder.tvTitle = (TextView)convertView.findViewById(R.id.tvTitle);
holder.tvPrice = (TextView)convertView.findViewById(R.id.tvItemPrice);
holder.tvTotals = (TextView)convertView.findViewById(R.id.tvTotals);
convertView.setTag(holder);
}else{
holder = (CartHolder)convertView.getTag();
}
Bitmap bmp = BitmapFactory.decodeFile(cImage.get(position));
holder.tvQty.setText(String.valueOf(cQty.get(position)));
int price = Integer.valueOf(cPrice.get(position).replace("£", ""));
int qty = cQty.get(position);
int total = price * qty;
holder.imgImage.setImageBitmap(bmp);
holder.tvTitle.setText(cTitle.get(position));
holder.tvPrice.setText(cPrice.get(position));
holder.tvTotals.setText(total+"£");
return convertView;
}
}
最佳答案
protected final char[] TOTAL_GBP=null;
在这里,您已将 TOTAL_GBP
声明为 final char[]
。您永远不会(而且,因为它是 final
,所以您不能)重新定义此变量,因此它将始终为 null
。因此,当你到达这里时:
payment.setSubtotal(new BigDecimal(TOTAL_GBP)); // TOTAL_GBP has to be null
我不确定 fillCartList()
是在哪里定义的,但是 a) 它在 new BigDecimal()
之前没有被调用,并且 b) 它使用了不同的定义TOTAL_GBP
。
您需要将BigDecimal
的正确值输入PaypalTask
的TOTAL_GBP
。
关于java - PayPal 支付 Activity 中的空异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15605565/
如果我的交易中的次要收款人没有 Paypal 帐户,会发生什么情况。他会收到要求他创建 Paypal 帐户的通知,还是 API 调用不会成功? 我几乎无法知道销售服务的用户在注册我的平台时是否有Pay
我们知道有这么多的支付网关服务提供商,即 Paypal ,moneybrookers,authorize.net以及许多国内和国际的支付网关提供商。现在,我的问题是,开发我们自己的支付网关服务以处理世
我们正在寻求替代我们对 Authorize.net 的使用。我花了很多时间查看 PayPal 文档,但找不到我的问题的明确答案: 使用 thousand 数十种不同的 PayPal API 可以在我们
我实际上是在为客户工作。我已经在网站上成功实现了 paypal pro,并且一切正常,我相信我遵循了他们的流程和指南,使它按照他们的意思工作。 因此,我一直在阅读 this webpage将网站投入生
我有2件商品要出售。我的运输底价为7.50美元,每增加一个项目,则为2.00美元 我已经设置了高级代码 运费= $ 7.50 运费2 = $ 2.00 一切正常,除非在购物车中添加了其他商品后,购物车
我想在不使用购物车的情况下实现一个不太复杂的解决方案。 我在自己对这个问题的回答中详细说明了解决方案,但如果有人能提出更好的方法,我会很高兴。 谢谢 最佳答案 实际上我最近不得不这样做。毫无疑问,我的
我创建了一个带有默认支付网关的shopify 小商店,即paypal express checkout。 当客户点击 Paypal 结帐按钮时,他们被要求输入他们的信用卡号并输入电子邮件并选择密码以注
一段时间以来,我一直在运行一个网站,该网站通过向 Paypal 网站发送一个 notify_url 来记录 Paypal 交易,并监听该 notify_url。我的监听页面解析从 paypal 发送的
我在网络应用程序中使用 PayPal Subscribe 按钮。我想将订阅开始日期传递给 PayPal,这不会总是今天的日期。 通常情况下,如果没有有效订阅,PayPal 会创建一个从今天开始的订阅。
大家好,我遇到了“立即购买”paypal 按钮这个令人沮丧的问题。 我希望我的客户能够通过 paypal 使用借记卡/信用卡付款,而无需创建 paypal 帐户,同时我希望能够根据产品类型将不同的定价
我想实现 paypal 授权并自动获取付款。我用过 Paypal 标准账户。我已发送带有授权参数的付款请求。
我想在我的 Paypal 沙盒账户中测试批量支付。根据 paypal 文档,它描述了将资金转移到 paypal 帐户的步骤。但我想转账到我客户的银行账户。我该怎么做? 仅供引用:PayPal 文档内容
我正在尝试登录我的沙盒帐户(使用 chrome),但由于 paypal 的新变化我不能。 Paypal 现在要求我登录开发者网站。我愿意。 然后我转到应用程序->沙盒帐户,然后按“sanbox 站点”
我有一个支持 Paypal 付款的 opencart 系统。是否有允许用户(信用卡)付款而无需强制注册 Paypal 帐户的选项。到目前为止,我使用的是 paypal 标准模块。 最佳答案 使用 Pa
我可以使用 Paypal ID 和密码使用 Paypal 详细信息进行付款而无需重定向到 Paypal 网站吗?我想在不离开我的网站的情况下完成所有付款流程。谢谢 最佳答案 您可以使用 PayFlow
当我尝试 https://fpdbs.paypal.com/dynamicimageweb?cmd=_dynamicimage 时,图像损坏了. 这是返回的错误信息: “尝试为应用程序构建 prote
我想向我的客户付款,为此我收到了他们的电子邮件,我想验证电子邮件地址是否存在于 paypal 中! 我搜索并找到了我尝试过的支付身份 API,但它只提供了我的我的数据!这是 LINK那个 API。 我
当从用户的 PayPal 账户中扣款时,PayPal 服务器在一定时间内没有响应(超时)。我们决定假设钱确实已经被拿走了,所以我们会退款。但是,如果钱没有从用户账户中扣除会怎样? PayPal返回什么
我有一个网站可以定期(比如每周一次)从客户那里收到钱。我将我的客户详细信息存储在我的数据库中,我想从我的客户帐户中提取资金,而不是每次都提示他们进行身份验证。金额会因客户而异。我怎样才能用 pay p
我有一个表格,其中一个团队签下他们的球员,然后被运送到 Paypal 进行注册付款,然后当一切都完成后我会收到一个 IPN。我正在做一个类似的表格,发现自从我创建该表格以来,Paypal 发生了很大变
我是一名优秀的程序员,十分优秀!