没有适合 Stripe 的构造函数
Posted
技术标签:
【中文标题】没有适合 Stripe 的构造函数【英文标题】:No suitable constructor for Stripe 【发布时间】:2020-01-06 12:57:44 【问题描述】:我得到的错误是 错误:没有找到适合 Stripe(StripeFormActivity,String) 的构造函数 构造函数 Stripe.Stripe() 不适用 (实际参数列表和形式参数列表的长度不同) 构造函数 Stripe.Stripe(String) 不适用 (实际参数列表和形式参数列表的长度不同)
Stripe stripe=new Stripe(StripeFormActivity.this,PUBLISHABLE_KEY);
stripe.createToken(
card,
new TokenCallback()
public void onSuccess(Token token)
//getTokenList().addToList(token);
ProgressDialog.cancel();
cusRotateLoading.stop();
Log.d("token", "token = " + token.getId());
Intent ri = new Intent();
ri.putExtra("stripe_id", token.getId());
setResult(2, ri);
finish();
public void onError(Exception error)
ProgressDialog.cancel();
cusRotateLoading.stop();
Common.showMkError(StripeFormActivity.this, error.getLocalizedMessage());
);
【问题讨论】:
嗯,你为什么要通过StripeFormActivity.this
?据我所知,这个论点应该是Context。例如,尝试传递new Stripe(getApplicationContext(),PUBLISHABLE_KEY);
,但基本上你应该传递一个上下文。
【参考方案1】:
这里是 kotlin 版本
Stripe(this, stripePublicKey).createToken(card, object : ApiResultCallback<Token>
override fun onSuccess(token: Token)
if (token.card != null)
else
Utils.showToast(getString(R.string.something_went_wrong), this)
override fun onError(error: Exception)
Utils.showToast(error.localizedMessage, this)
)
这里是java版本
new Stripe(this, stripePublicKey).createToken(card, new ApiResultCallback<Token>
override onSuccess(Token:token)
if (token.card != null)
else
Utils.showToast(getString(R.string.something_went_wrong), this)
override onError(Exception:error)
Utils.showToast(error.localizedMessage, this)
)
【讨论】:
【参考方案2】:从TokenCallback()
更改为新的ApiResultCallback<Token>()
。导入com.stripe.android.ApiResultCallback
并获取当前最新版本的11.1.3
所以修改后会是这样的
Stripe stripe=new Stripe(StripeFormActivity.this,PUBLISHABLE_KEY);
stripe.createToken(
cardToSave,
new ApiResultCallback<Token>()
public void onSuccess(@NonNull Token token)
//getTokenList().addToList(token);
ProgressDialog.cancel();
cusRotateLoading.stop();
Log.d("token", "token = " + token.getId());
Intent ri = new Intent();
ri.putExtra("stripe_id", token.getId());
setResult(2, ri);
finish();
public void onError(@NonNull Exception error)
ProgressDialog.cancel();
cusRotateLoading.stop();
Common.showMkError(StripeFormActivity.this, error.getLocalizedMessage());
);
【讨论】:
错误:不兼容的类型:> 无法转换为 TokenCallbac 在你的 app.gradle 中添加这个 (implementation 'com.stripe:stripe-android:11.1.3'
) 依赖并同步你的项目。
与第一个错误相同【参考方案3】:
在最新版本12.8.2
中,有几个API已经被弃用,请看下面我的解决方案。
第 1 步:在 gradle 文件中使用最新的依赖项
def stripe_version = "12.8.2"
implementation "com.stripe:stripe-android:$stripe_version"
第 2 步:将StripeFormActivity
中的代码更改为
Stripe stripe = new Stripe(StripeFormActivity.this, PUBLISHABLE_KEY);
stripe.createCardToken(card, new ApiResultCallback<Token>()
@Override
public void onSuccess(Token token)
//getTokenList().addToList(token);
ProgressDialog.cancel();
cusRotateLoading.stop();
Log.d("token", "token = " + token.getId());
Intent ri = new Intent();
ri.putExtra("stripe_id", token.getId());
setResult(2, ri);
finish();
@Override
public void onError(@NotNull Exception e)
ProgressDialog.cancel();
cusRotateLoading.stop();
Common.showMkError(StripeFormActivity.this, error.getLocalizedMessage());
);
【讨论】:
以上是关于没有适合 Stripe 的构造函数的主要内容,如果未能解决你的问题,请参考以下文章
使用杰克逊的 JSON 反序列化:没有找到适合类型的构造函数 - 可以提供默认构造函数或注释构造函数 [重复]
Jackson ObjectMapper 无法反序列化 POJO,抛出异常:没有找到适合类型 [...] 的构造函数:无法从 JSON 对象实例化