【问题标题】:No suitable constructor for Stripe没有适合 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);,但基本上你应该传递一个上下文。

标签: android stripe-payments


【解决方案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&lt;Token&gt;()。导入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());
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2013-08-20
      相关资源
      最近更新 更多