在新 Android Studio 中初始化条纹对象

Initialize a Stripe Object in new Android Studio

目前,我正在努力在 Android Studio 应用程序中创建 Stripe 支付方式。这将涉及一个信用卡对象,该对象将由 Stripe 存储到我的 Firestore 数据库中。不幸的是,我使用的教程中的一行已经过时,因为它在没有视图的情况下使用了 getContext()。

条纹背景: https://www.youtube.com/watch?v=JeyxolsJ3aE

Firestore 的背景: https://firebase.google.com/docs/firestore

这是我正在关注的教程的 link: https://stripe.com/docs/mobile/android 不幸的是,我没能找到已知的、使用相同格式但不使用 getContext() 的教程。

我已经完成了插入行的所有步骤:

final Stripe stripe = new Stripe(
    getContext(),
    "pk_test_TYooMQauvdEDq54NiTphI7jx"
);

在我的 Android Studio (3.4.1) 版本中,getContext() 似乎无法在没有视图的情况下使用(显示为红色)。因此,我尝试用各种命令来代替。但是,它们都产生相同的崩溃消息 "Invalid Content Provider: null"。我相信 "Content Provider" 指的是传入的上下文。

我应该提一下,Stripe 对象是在 On-Click 侦听器中创建的。此外,我知道 "pk_test" 密钥是正确的,并且我测试了其他有效 ID 也无济于事。此外,通过注释掉代码的测试,我确信这是产生我的错误的行。

我的理论是上下文被 Stripe 或 Firebase 拒绝了。这是因为 Stripe 上下文被称为 "Stripe Provider" (https://lh3.googleusercontent.com/-ByYW3X0ua38/XQ_kRpmddLI/AAAAAAAAAAI/YfhjxSJ9iO0aJwZ8RtANeCXKXyYglWX1QCK8BGAs/s0/2019-06-23.png)

我尝试过的一些命令是:

getContext() (not recognized)
getApplicationContext()
getBaseContext()
this
this.getApplicationContext()
ClassName.this.getApplicationContext()
ClassName.this.getBaseContext()
Submit.getContext()
WrappingLayoutView.getContext()

我还尝试在变量中的 OnClick 侦听器上方的 OnCreate 中捕获上下文。

由于其中 none 有效,我不知道该怎么做。 这是我的 Java 代码:

public class AddCardActivity 扩展 AppCompatActivity { 私人按钮提交;

public Context mContext;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_card);
    init();

    mContext = this.getApplicationContext();

    //Not working
    /**View mV=findViewById(R.id.myLView);
     mContext=mV.getContext();**/
    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             //Use stripe to add new payment to firestore


            //This line causes a crash
            Stripe stripe = new Stripe(submit.getContext(),
                    "pk_test_t6NMvJpXDEZd3eOn5SU4y6DA"
            );
            // The Card class will normalize the card number
            final Card card = Card.create("4242-4242-4242-4242", 12, 2020, "123");
            //Update this with more useful error messages
            if (card == null) {
                Toast.makeText(getApplicationContext(), "Invalid Card!", Toast.LENGTH_LONG).show();
            }

            card.validateNumber();
            card.validateCVC();
            stripe.createToken(
                    card,
                    new TokenCallback() {
                        public void onSuccess(@NonNull Token token) {
                            // Send token to your server
                        }

                        public void onError(@NonNull Exception error) {
                            // Show localized error message
                            Toast.makeText(getApplicationContext(), "Invalid Card!", Toast.LENGTH_LONG).show();
                        }
                    }
            );
        }
    });


}

private void init() {
    submit = (Button) findViewById(R.id.addCardActivityButton);
}

给你:

Token token = null;

final Card card = new Card(cardNumber, month, year, cvc);

final Stripe stripe = new Stripe(getApplicationContext());
try {

    token = stripe.createTokenSynchronous(card, "pk_test_TYooMQauvdEDq54NiTphI7jx");

} catch (StripeException stripeEx) {

    errorMessage = stripeEx.getLocalizedMessage();
}