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
相关产品推荐
相关产品推荐

