You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyjnius调用Stripe Android SDK Card类时构造函数匹配失败求助

解决Pyjnius调用Stripe Android Card类时的构造函数匹配错误

嘿,我之前也踩过Pyjnius调用Java重载构造函数的坑,刚好能帮你解决这个问题~

你遇到的jnius.jnius.JavaException: No constructor matching your arguments错误,确实是因为Stripe的Card类有多个重载构造函数,Pyjnius没法自动识别出你想调用的那一个。尤其是Java里的基本类型(int)和包装类(Integer)的区别,很容易让Pyjnius匹配出错。

解决方案1:明确传入Java包装类实例

Stripe v2.1.0的Card类里,你想调用的构造函数是:

public Card(String number, Integer expMonth, Integer expYear, String cvc)

这里的月份和年份是Java的Integer包装类,而不是基本类型int。所以你需要把Python的int转换成Java的Integer对象,再传入构造函数:

from jnius import autoclass

# 自动导入需要的Java类
Card = autoclass('com.stripe.android.model.Card')
Integer = autoclass('java.lang.Integer')

# 准备参数,注意把数字转成Java Integer
card_num = "4242424242424242"  # 测试卡号
exp_mon = Integer(12)
exp_year = Integer(2025)
cvc = "123"

# 现在实例化Card就不会报错了
card = Card(card_num, exp_mon, exp_year, cvc)

解决方案2:通过反射指定构造函数签名

如果第一种方法还是不行,你可以直接通过Java反射获取精确匹配的构造函数,完全避免匹配歧义:

from jnius import autoclass

Card = autoclass('com.stripe.android.model.Card')
Integer = autoclass('java.lang.Integer')
String = autoclass('java.lang.String')

# 获取对应参数类型的构造函数
constructor = Card.class_.getConstructor(String, Integer, Integer, String)

# 传入参数实例化
card_num = String("4242424242424242")
exp_mon = Integer(12)
exp_year = Integer(2025)
cvc = String("123")

card = constructor.newInstance(card_num, exp_mon, exp_year, cvc)

额外注意点

  • 确保你的参数顺序和Java构造函数完全一致:卡号(String)→ 到期月(Integer)→ 到期年(Integer)→ CVC(String)
  • 如果你用的是其他版本的Stripe Android SDK,记得对应检查Card类的构造函数签名,避免版本不匹配的问题

内容的提问来源于stack exchange,提问作者GoBig06

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:27:43