Razorpay支付网关onPaymentError方法内Intent跳转不生效问题求助
问题根因排查&解决方案
最常见的触发原因是支付失败场景下PaymentData返回空值,直接调用paymentData.getData().toString()会触发空指针异常,代码逻辑进入catch块,后续的页面跳转代码不会执行。
排查步骤
- 先查看
onPaymentError回调的catch块日志,确认是否有NullPointerException抛出,你当前仅写了e.printStackTrace(),可以在异常捕获逻辑中增加本地日志或者调试断点验证。 - 确认回调逻辑执行在主线程:虽然Toast正常弹出已经可以大概率确认回调在主线程,也可以额外增加日志验证线程状态。
修复代码
调整onPaymentError逻辑,增加空判断、异常场景兜底跳转:
@Override public void onPaymentError(int errorCode, String errorMsg, PaymentData paymentData) { String paymentStatus = "{}"; try { Utility.showToastMessage(this, errorMsg); // 先对PaymentData做非空判断 if (paymentData != null && paymentData.getData() != null) { paymentStatus = paymentData.getData().toString(); } } catch (Exception e) { e.printStackTrace(); paymentStatus = "{\"error\":\"" + e.getMessage() + "\"}"; } finally { // 跳转逻辑放到finally块,无论是否抛异常都能执行 Intent intent = new Intent(PaymentActivity.this, PaymentStatusActivity.class); // 本页面是Activity上下文,无需添加FLAG_ACTIVITY_NEW_TASK,可直接移除 intent.putExtra("payment_status", paymentStatus); startActivity(intent); finish(); } }
额外可选优化
如果担心回调线程问题,可以将跳转逻辑包裹在runOnUiThread中保证主线程执行:
runOnUiThread(() -> { Intent intent = new Intent(PaymentActivity.this, PaymentStatusActivity.class); intent.putExtra("payment_status", paymentStatus); startActivity(intent); finish(); });
内容的提问来源于stack exchange,提问作者Gaurav Dureja
相关产品推荐
相关产品推荐

